dplyr 非标准评估,在函数外卷曲卷曲
dplyr non standard evaluation with curly curly outside a function
我看到的所有 curly curly 示例都在编写函数的上下文中。
我只想循环我的分组变量并获取频率,所以我试图让这样的东西起作用:
my_var <- "model"
mpg %>% group_by({{ my_var }}) %>% summarise(n=n())
但这并没有给出预期的输出,即如果我只是使用
我会得到什么
mpg %>% group_by(model) %>% summarise(n=n())
如何在这种简单的设置中使用非标准评估?
请注意,我不是在询问 group_by_at
类型的解决方案,而是一个非标准的评估解决方案,因此这不是
的副本
Curly-Curly 在函数中使用并与不带引号的变量一起使用。
library(dplyr)
library(rlang)
my_func <- function(data, var) {
data %>% group_by({{var}}) %>% summarise(n=n())
}
my_func(mpg, model)
# model n
# <chr> <int>
# 1 4runner 4wd 6
# 2 a4 7
# 3 a4 quattro 8
# 4 a6 quattro 3
# 5 altima 6
# 6 c1500 suburban 2wd 5
# 7 camry 7
# 8 camry solara 7
# 9 caravan 2wd 11
#10 civic 9
# … with 28 more rows
要使用外部函数和带引号的变量,我们可以使用 sym
并计算 (!!
)
mpg %>% group_by(!!sym(my_var)) %>% summarise(n=n())
或使用group_by_at
mpg %>% group_by_at(my_var) %>% summarise(n=n())
我看到的所有 curly curly 示例都在编写函数的上下文中。
我只想循环我的分组变量并获取频率,所以我试图让这样的东西起作用:
my_var <- "model"
mpg %>% group_by({{ my_var }}) %>% summarise(n=n())
但这并没有给出预期的输出,即如果我只是使用
我会得到什么mpg %>% group_by(model) %>% summarise(n=n())
如何在这种简单的设置中使用非标准评估?
请注意,我不是在询问 group_by_at
类型的解决方案,而是一个非标准的评估解决方案,因此这不是
Curly-Curly 在函数中使用并与不带引号的变量一起使用。
library(dplyr)
library(rlang)
my_func <- function(data, var) {
data %>% group_by({{var}}) %>% summarise(n=n())
}
my_func(mpg, model)
# model n
# <chr> <int>
# 1 4runner 4wd 6
# 2 a4 7
# 3 a4 quattro 8
# 4 a6 quattro 3
# 5 altima 6
# 6 c1500 suburban 2wd 5
# 7 camry 7
# 8 camry solara 7
# 9 caravan 2wd 11
#10 civic 9
# … with 28 more rows
要使用外部函数和带引号的变量,我们可以使用 sym
并计算 (!!
)
mpg %>% group_by(!!sym(my_var)) %>% summarise(n=n())
或使用group_by_at
mpg %>% group_by_at(my_var) %>% summarise(n=n())