问题标签 [tidyeval]

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 投票
2 回答
1200 浏览

r - 使用整洁的评估选择命名的 [list] 元素

我正试图围绕非标准评估,因为它在rlang包中进行了解释。考虑到这个目标,我的问题是:

如何编写dplyr::select.list()符合 tidy 评估原则的函数?

这是我目前如何编写包装器的示例dplyr::select()

这适用于数据帧,例如,

但不在名单上:

老实说,我不确定上面的输出中发生了什么......它返回一个交互式提示,要求我选择我想要的元素。这不是很理想,imo。

无论如何,我想要完成的是一个select.list()函数,它返回我通过非标准评估选择的命名元素列表。这是我的解决方案,但感觉太老套了:

有没有更干净、更整洁的评估一致的方法来做到这一点?

0 投票
1 回答
171 浏览

r - 使用 rlang 选择整个数据框,而不仅仅是一列

我正在尝试创建一个自定义函数,其中仅在数据框的一列上执行某些操作。但我希望该函数以这样一种方式工作,它不仅会输出执行操作的列,而且还会输出从中绘制特定列的整个数据框。这是我想要实现的一个非常简单的示例:

reprex 包(v0.1.1.9000)于 2018 年 2 月 14 日创建。

0 投票
2 回答
1678 浏览

r - 如何在列上使用 tidyeval 进行变异?

我很抱歉造成混乱,但最终,我发布的第一个示例(在页面底部)并没有帮助我弄清楚 tidyeval 如何与 mutate 一起工作,所以我添加了一个新示例。

我想创建一个需要三个参数的函数:

  • 一个数据框
  • 要变异的列
  • 一个变量(来自数据框)来替换正在变异的值

例如,用我尝试过mpg的值替换其中的值:carb

这不起作用,因为:

mutate_impl(.data, dots) 中的错误:列mpg的类型函数不受支持

我的第一个例子(@MrFlick 和 @UseR 都适用于此):

例如,下面的应该mutate()将所有 1 分配给传入的变量...

错误:LHS 必须是名称或字符串

最终,输出应该与mutate(mtcars, mpg = 1)

0 投票
1 回答
314 浏览

r - magrittr 管道中的 enquo()

我只是想了解这里出了什么问题。在第一种情况下(工作),我将enquo()-ted 参数分配给一个变量,在第二种情况下,我直接在调用mutate.

编辑 这里还有一些需要考虑的行:)

将调用包装到 quo() 中,看起来好像要评估的表达式是正确“构建”的

如果你告诉它eval_tidy,它可以工作(没有 quo() 就不能工作)

如果你不使用管道,它也可以工作

关于错误消息,当人们尝试传递 data.frames 不支持的类型时,这就是所得到的,例如。

mutate(df, value = function(x) x) # mutate_impl(.data, dots) 中的错误:列value的闭包类型不受支持

对我来说,似乎 myfun_2 中的 quosure 不是由 评估的mutate,这在某种程度上是有趣/不直观的行为。你认为我应该向开发人员报告这个吗?

0 投票
1 回答
1662 浏览

r - 对多个 dplyr 过滤条件使用 tidy eval

我是 tidy eval 的新手,并试图编写通用函数——我现在正在努力解决的一件事是为分类变量编写多个过滤条件。这就是我现在正在使用的-

我想知道如何使用整洁的评估实践来重写它。我找到了有关将 quos() 用于多个参数的材料,但正如您所见,我在这里有两个不同的参数列表,它们需要相互映射。

任何帮助表示赞赏,谢谢!

0 投票
1 回答
1234 浏览

r - 使用 `dplyr::mutate()` 从向量中指定的名称创建几个新变量

我想在数据框中创建几个新的空变量,并在其中指定向量中的变量名称。如果我只指定一个变量名,但使用多个变量名,则此方法有效。我尝试了一些以前的解决方案,但在这种情况下它们似乎不起作用,例如:


所需的输出将是:

我想知道如何才能使这项工作?

0 投票
1 回答
87 浏览

r - 如何从 eval_tidy 评估的代码中访问 .data 环境

我想用来评估一个接受命名空间rlang::eval_tidy()的函数。...mtcars

这是一个我想评估的示例函数,它是从 assertr 借来的。

完成此操作的 base-R 方法是:

但我想使用eval_tidy其他好处,比如.data代词。根据 rlang 文档enexpr是 rlang 的方式substitute。让我们同时尝试substituteenexpr

这是怎么回事?有什么eval_tidy不同?

我知道 rlang 具有要处理的功能...,但在解决这个问题时,我不想修改has_all_names. (用户应该能够提供...作为参数的任意函数。)

0 投票
2 回答
718 浏览

r - 如何在 purrr 循环中更新数据框?

考虑这个简单的例子

我有一个以dataframeand anumber作为参数的函数,我想在每次迭代时修改数据框。

我写了以下内容,但它没有更新数据框:

不幸mydata的是没有正确修改:

给出:

而预期的输出应该是

我在这里想念什么?谢谢!

0 投票
1 回答
1499 浏览

r - 何时在 rlang::sym() 上使用 rlang::ensym()?

我可以从文档中看到rlang::enquo()rlang::quo()在不同的上下文中使用。因此,我rlang::enysm()最近在函数声明中使用了(见下文)。但是,包裹在另一个 SE 函数调用中,我得到了一个意外错误,我猜这与惰性评估有关(如果我force(x)在 中,它就会消失f_enysm())。但似乎我也可以通过简单地使用sym(x)而不是ensym(x)因为x是一个不传达有关环境的任何信息的字符串(而不是quosures)来解决这个问题。

那安全吗?

如果是,我不知道什么时候应该更喜欢ensym()sym并且建议的使用似乎与quo()/ enquo()expr()/enexpr()等使用的术语不一致。

此外,如果我删除中间函数f_sym()f_enysm()直接调用f(),我不会得到问题行为。

0 投票
1 回答
340 浏览

r - 如何在 mutate_at 中取消引用拼接?

parse_factor然后我想fct_recode在数据框中添加几个变量。级别(及其重新编码值)存储在命名字符串中。

我如何使用它们来实现我想要的?

请注意,在我的情况下,我不能简单地使用mutate,因为我有几个要应用重新编码的变量。

以下是我认为可行(但不可行)的示例。