1

我看到的 curly curly 的所有示例都在编写函数的上下文中。
我只想循环我的分组变量并获取频率,所以我试图让这样的事情起作用:

my_var <- "model"
mpg %>% group_by({{ my_var }}) %>% summarise(n=n())

但这并没有给出预期的输出,即如果我只是使用我会得到什么

mpg %>% group_by(model) %>% summarise(n=n())

如何在这个简单的设置中使用非标准评估?

请注意,我不是在询问group_by_at类型解决方案,而是非标准评估解决方案,因此这不是dplyr group by colnames 的副本,描述为字符串向量

4

1 回答 1

1

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())
于 2019-09-26T10:12:18.453 回答