R中函数内部的取消引用参数

Unquoting argument inside of function in R

我不明白为什么我的函数中的 bang-bang 运算符没有取消引用我的 grp 参数。任何帮助将不胜感激!

library(dplyr)

test_func <- function(dat, grp){
  dat %>%
    group_by(!!grp) %>%
    summarise(N =  n())
}

test_func(dat = iris, grp = "Species")

它不是按物种分组,而是生成整个数据的摘要:

如果我们传递的是字符串,则转换为 symbol 并计算 (!!)

test_func <- function(dat, grp){
 dat %>%
    group_by(!! rlang::ensym(grp)) %>%
    summarise(N =  n(), .groups = 'drop')
 }

-测试

test_func(dat = iris, grp = "Species")
# A tibble: 3 x 2
#  Species        N
#* <fct>      <int>
#1 setosa        50
#2 versicolor    50
#3 virginica     50

或者另一种选择是使用 across

test_func <- function(dat, grp){
    dat %>%
       group_by(across(all_of(grp))) %>%
       summarise(N =  n(), .groups = 'drop')
 }