Advanced R的第 19 章解释了expr()
在函数内部没有用处。
但是,在以下情况下,如果没有expr()
.
假设我想在一个函数中对一个 tibble 进行分组。
data(iris)
iris %>% group_by(Species)
显而易见的方法是使用“卷曲卷曲”。
func_a <- function(data, grouping) {
data %>% group_by({{grouping}})
}
func_a(iris, Species)
但是,如果我允许任意提供的表达式,则“卷曲”不起作用。
func_b <- function(data, ...) {
data %>% group_by({{...}})
}
func_b(iris, Species)
# Error in (function (x) : object 'Species' not found
最后,我发现我需要expr()
让它工作。
func_c <- function(data, ...) {
grouping <- expr(...)
data %>% group_by(!!grouping)
}
func_c(iris, Species)
expr()
Advanced R 中的示例是:
f1 <- function(x) expr(x)
f1(a + b + c)
#> x
我的主要问题是为什么func_c
有效。是否expr()
照...
原样评估它!!
?为什么我们要采取不同的方法...
呢?
然后,我不确定为什么这不起作用。
func_d <- function(data, grouping) {
grouping <- expr(grouping)
data %>% group_by(!!grouping)
}
func_d(iris, Species)
我还检查了rlang manual,但解释对我来说太简短了。