问题标签 [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 循环中更新数据框?
考虑这个简单的例子
我有一个以dataframe
and 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
,因为我有几个要应用重新编码的变量。
以下是我认为可行(但不可行)的示例。