问题标签 [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.
r - 使用整洁的评估选择命名的 [list] 元素
我正试图围绕非标准评估,因为它在rlang包中进行了解释。考虑到这个目标,我的问题是:
如何编写
dplyr::select.list()符合 tidy 评估原则的函数?
这是我目前如何编写包装器的示例dplyr::select():
这适用于数据帧,例如,
但不在名单上:
老实说,我不确定上面的输出中发生了什么......它返回一个交互式提示,要求我选择我想要的元素。这不是很理想,imo。
无论如何,我想要完成的是一个select.list()函数,它返回我通过非标准评估选择的命名元素列表。这是我的解决方案,但感觉太老套了:
有没有更干净、更整洁的评估一致的方法来做到这一点?
r - 使用 rlang 选择整个数据框,而不仅仅是一列
我正在尝试创建一个自定义函数,其中仅在数据框的一列上执行某些操作。但我希望该函数以这样一种方式工作,它不仅会输出执行操作的列,而且还会输出从中绘制特定列的整个数据框。这是我想要实现的一个非常简单的示例:
由reprex 包(v0.1.1.9000)于 2018 年 2 月 14 日创建。
r - 如何在列上使用 tidyeval 进行变异?
我很抱歉造成混乱,但最终,我发布的第一个示例(在页面底部)并没有帮助我弄清楚 tidyeval 如何与 mutate 一起工作,所以我添加了一个新示例。
我想创建一个需要三个参数的函数:
- 一个数据框
- 要变异的列
- 一个变量(来自数据框)来替换正在变异的值
例如,用我尝试过mpg的值替换其中的值:carb
这不起作用,因为:
mutate_impl(.data, dots) 中的错误:列
mpg的类型函数不受支持
我的第一个例子(@MrFlick 和 @UseR 都适用于此):
例如,下面的应该mutate()将所有 1 分配给传入的变量...
错误:LHS 必须是名称或字符串
最终,输出应该与mutate(mtcars, mpg = 1)
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,这在某种程度上是有趣/不直观的行为。你认为我应该向开发人员报告这个吗?
r - 对多个 dplyr 过滤条件使用 tidy eval
我是 tidy eval 的新手,并试图编写通用函数——我现在正在努力解决的一件事是为分类变量编写多个过滤条件。这就是我现在正在使用的-
我想知道如何使用整洁的评估实践来重写它。我找到了有关将 quos() 用于多个参数的材料,但正如您所见,我在这里有两个不同的参数列表,它们需要相互映射。
任何帮助表示赞赏,谢谢!
r - 使用 `dplyr::mutate()` 从向量中指定的名称创建几个新变量
我想在数据框中创建几个新的空变量,并在其中指定向量中的变量名称。如果我只指定一个变量名,但使用多个变量名,则此方法有效。我尝试了一些以前的解决方案,但在这种情况下它们似乎不起作用,例如:
所需的输出将是:
我想知道如何才能使这项工作?
r - 如何从 eval_tidy 评估的代码中访问 .data 环境
我想用来评估一个接受命名空间rlang::eval_tidy()的函数。...mtcars
这是一个我想评估的示例函数,它是从 assertr 借来的。
完成此操作的 base-R 方法是:
但我想使用eval_tidy其他好处,比如.data代词。根据 rlang 文档,enexpr是 rlang 的方式substitute。让我们同时尝试substitute和enexpr。
这是怎么回事?有什么eval_tidy不同?
我知道 rlang 具有要处理的功能...,但在解决这个问题时,我不想修改has_all_names. (用户应该能够提供...作为参数的任意函数。)
r - 如何在 purrr 循环中更新数据框?
考虑这个简单的例子
我有一个以dataframeand anumber作为参数的函数,我想在每次迭代时修改数据框。
我写了以下内容,但它没有更新数据框:
不幸mydata的是没有正确修改:
给出:
而预期的输出应该是
我在这里想念什么?谢谢!
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(),我不会得到问题行为。
r - 如何在 mutate_at 中取消引用拼接?
parse_factor然后我想fct_recode在数据框中添加几个变量。级别(及其重新编码值)存储在命名字符串中。
我如何使用它们来实现我想要的?
请注意,在我的情况下,我不能简单地使用mutate,因为我有几个要应用重新编码的变量。
以下是我认为可行(但不可行)的示例。