- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我只是想了解这里出了什么问题。在第一种情况(有效)中,我将 enquo()
-ted 参数分配给一个变量,在第二种情况下,我直接在调用 mutate
时使用引用的参数>.
library("dplyr")
df <- tibble(x = 1:5, y= 1:5, z = 1:5)
# works
myfun <- function(df, transformation) {
my_transformation <- rlang::enquo(transformation)
df %>%
gather("key","value", x,y,z) %>%
mutate(value = UQ(my_transformation))
}
myfun(df,exp(value))
# does not work
myfun_2 <- function(df, transformation) {
df %>%
gather("key","value", x,y,z) %>%
mutate(value = UQ(rlang::enquo(transformation)))
}
myfun_2(df,exp(value))
#>Error in mutate_impl(.data, dots) : Column `value` is of unsupported type closure
编辑这里还有一些值得思考的地方:)
将调用包装到 quo() 中,看起来好像要计算的表达式已正确“构建”
# looks as if the whole thing should be working
myfun_2_1 <- function(df, transformation) {
quo(df %>%
gather("key","value", x,y,z) %>%
mutate(value = UQ(rlang::enquo(transformation))))
}
myfun_2_1(df,exp(value))
如果您将此告诉 eval_tidy
,它就会起作用(没有 quo() 就不起作用)
# works
myfun_2_2 <- function(df, transformation) {
eval_tidy(quo(df %>%
gather("key","value", x,y,z) %>%
mutate(value = UQ(rlang::enquo(transformation)))))
}
myfun_2_2(df,exp(value))
如果你不使用管道,它也可以工作
# works
myfun_2_3 <- function(df, transformation) {
mutate(gather(df,"key","value", x,y,z), value = UQ(rlang::enquo(transformation)))
}
myfun_2_3(df,exp(value))
关于错误消息,这是当人们尝试传递 data.frames 不支持的类型时得到的信息,例如。
变异(df,值=函数(x)x) # mutate_impl(.data,dots) 中的错误:列 value
的闭包类型不受支持
对我来说,myfun_2 中的 quosure 似乎不是由 mutate
计算的,这在某种程度上是有趣/非直观的行为。您认为我应该向开发人员报告此情况吗?
最佳答案
此限制在 rlang 0.2.0 中得到解决。
从技术上讲:问题的核心是 magrittr 在当前环境的子环境中评估其参数。这是包含 .
代词的环境。从 0.2.0 开始,使用 enquo()
和变体捕获参数现在是词法范围的,这意味着它会查找父环境堆栈以找到要捕获的参数。这解决了 magrittr 问题。
关于r - magrittr 管道内的 enquo(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49074569/
我只是想了解这里出了什么问题。在第一种情况(有效)中,我将 enquo()-ted 参数分配给一个变量,在第二种情况下,我直接在调用 mutate 时使用引用的参数>. library("dplyr"
问题 我想在将自定义函数的 enquo 参数传递给 dplyr 链之前确保其类型正确。 我尝试过的 我能够将参数组合到一个数据帧中,然后然后测试每个变量的类型。但我想知道是否有一种解决方案可以在将每种
我正在使用 infer 包运行卡方测试,例如, df %>% chisq_test(label ~ feature) 我想把它放到一个函数中,这样我就可以写: my_chisq_function
我正在编写一个使用大量 dplyr 函数的程序包 - 要通过 devtools::check() 中的所有测试,我必须使用 。数据 频繁。一些功能嵌套到其他功能中。在下面的示例中,我需要在 tidys
我有一个创建数据框的函数,但在此过程中更改了名称。我正在尝试使用 dplyr quosures 处理空列名。我的测试套件如下所示: dataframe % pull(!!target) * 3 # h
我对 enquo 和 toString 的使用仍然有点困惑。在下面的示例中,我基本上只是尝试过滤数据框并在最后对行进行求和。我真的不明白为什么 enquo 和 toString 对我想做的第一件事做同
我对 enquo 和 toString 的使用仍然有点困惑。在下面的示例中,我基本上只是尝试过滤数据框并在最后对行进行求和。我真的不明白为什么 enquo 和 toString 对我想做的第一件事做同
我正在编写一个使用 plot_ly 绘制圆饼图的函数。参数 labels = ~ 中的波浪号 (~) 与反引号运算符 !! 冲突。这个问题有解决方案吗? pieplotr <- function (d
我正在创建一个工作流,其中包含重命名、选择依据和使用我在管道之前提供的名称进行变异的相同管道步骤。 我已经成功使用 enquo()和 !! (bang bang) 重命名为我想要的字符串,然后再次选择
对于整洁的评估来说相对较新,虽然我正在使用的函数可以工作,但我想知道为什么使用不同的辅助函数。例如,enquo 和 ensym 之间有什么区别?在我下面创建的用于捕获每日平均值和移动平均值的函数中,它
在 rlang 中有一个非常微妙(并且非常令人困惑)的区别...... quosures 不是 quosure 对象!换句话说: quo()和 enquo()退订 quos()和 enquos()退订
library(dplyr) #Devel version, soon-to-be-released 0.6.0 library(tidyr) library(ggplot2) library(for
我是一名优秀的程序员,十分优秀!