问题标签 [rlang]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
6424 浏览

r - 将列名向量传递给 mutate (dplyr) 中的 paste()

我正在尝试编写一个函数,该函数将用户的列名向量作为其参数之一。列名将用于指定数据框的哪些列将被粘贴在一起以在 dplyr::mutate 中形成一个新列。我试图先折叠参数向量的元素,然后在 mutate 中使用折叠的字符串 - 这是错误的。请参阅下面的最新尝试。我进行了其他尝试,但我不了解 dplyr 中的新 quo、enquo、UQ、!!!、!! 等等。有人可以展示我需要做什么吗?

编辑:这是我尝试使用 quo 和 !! 在函数定义中。结果是一列重复的字符串“.yr,.mo”

0 投票
1 回答
533 浏览

r - 为什么表达式 LHS 中的 `rlang::sym` 和 `rlang::quo_name` 表现相似?

使用 调用下面的函数foo(c("b"))。输出显示为内联。

我很困惑为什么两者(1)df %>% mutate(!!x_ := 100 + !!x))和 (2)df %>% mutate(!!x := 100 + !!x))工作方式相同感到困惑;仅基于dplyr 编程配方(1) 应该可以工作。

0 投票
3 回答
2892 浏览

r - 在一个函数中展开多列

通常我需要spread多个值列,就像在这个问题中一样。但是我经常这样做,以至于我希望能够编写一个执行此操作的函数。

例如,给定数据:

我想创建一个返回如下内容的函数:

我怎样才能做到这一点?

0 投票
1 回答
192 浏览

r - List of quosures as input of a set of functions

This question refers to "Programming with dplyr"

I want to slice the ... argument of a function and use each element as an argument for a corresponding function.

should evaluate for example foo(x, y, z) in this form:

so that x, y, z remain quoted till they get evaluated in bar.

I tried this:

I have two intentions:

  1. Learn better how tidyeval/rlang works and when to use it.
  2. turn future::futureOf() into a function that get me more then one futures at once.

This approach might be overly complicated, because I don't fully understand the underlying concepts of tidyeval yet.

0 投票
2 回答
89 浏览

r - 如何在R中没有for循环的情况下将正则表达式匹配从列表扩展到二进制字段?

我有一个数据框,其中包含带有字符串的字段,例如“鱼、鸟、动物”等。我已将它们折叠成一个列表,并遍历它们以在同一数据框中创建逻辑字段。 更新:这个问题现在更新了一个更详细的例子。

但是,这很慢并且感觉不是最佳的。这不是我必须多次执行的操作,所以我并没有那么烦恼,但认为可能有更好的方法,也许使用dplyr

此代码确实为字段items中 my_list 中每个元素的每个匹配项创建新字段。

将创建以下数据框:

运行此代码将收集字段项并将其扩展为逻辑字段

导致这个数据框:

0 投票
0 回答
124 浏览

r - 从列列表创建表达式的连接

我想从 char 向量创建一个连词表达式。即给定一个向量,如 c("a", "b", "c")。最终我想将它传递给 dplyr::filter

这是我的尝试:

在 R 中必须有一种更简单的方法来从字符串创建这样的表达式,但我找不到任何方法。有什么建议么?

0 投票
2 回答
2563 浏览

r - 在R中编写一个函数以按数据框中的变量列分组

我正在尝试编写一个函数,该函数允许我通过对数据框中的多个因素进行分组来生成描述性统计数据。我花了太多时间试图让我的函数识别我选择的变量。

这是假数据:

假代码示例:

这给了我:

第二次尝试

我试图将函数中选择的 by 变量分配给一个新变量并继续执行。

假代码示例(第二次尝试):

这,第二次尝试,给了我:

0 投票
1 回答
132 浏览

r - 使用 R 中的 quo() 评估作为另一个函数中的争论的函数

我制作了一个函数,该函数将另一个函数作为参数,该参数函数将原始函数提供的某个对象(在示例中为向量)作为其参数。以正确的方式进行函数调用一直具有挑战性。以下是我在阅读dplyr 编程后使用的三种方法。只有选项三有效,

我想知道这是否实际上是在函数中评估函数的最佳方法。

我的问题是:

  1. 选项 3 是执行此评估的最佳/最简单的方法吗
  2. 正在发生的事情的解释

编辑

在阅读@Rui Barradas 非常清晰简洁的答案后,我意识到我实际上正在尝试做一些类似于下面的事情,我没有设法使用 Rui 的方法进行工作,但使用环境设置解决了

该函数在当前环境而不是捕获环境中进行评估。因为在该环境中没有对象“OtherStuff”,所以在全局环境中搜索父环境以找到“OtherStuff”。

0 投票
1 回答
734 浏览

r - 连接quosures和字符串

我正在寻找一种连接 quosure 和结果为 quosure 的字符串的方法。实际上,如果我使用paste0()and quo_name(),我可以做到。但我想知道是否有更优雅的替代方法可以在我的包中编写函数。这是一个通用示例:

0 投票
1 回答
299 浏览

r - 根据字符向量从数据框中创建动态列数

给定应包含总和的列列表,我正在尝试对 1 列或多列数据求和。

例如:

我可以使用以下代码获得我想要的结果:

输出为:

我在试图弄清楚如何动态创建汇总列的数量时遇到了问题。我认为在 summarise 调用中循环可能会起作用,但它没有。

输出: