当参数是 dplyr 中的字符串时,用 group_by 替换 group_by_

Ada*_*ack 3 r dplyr tidyverse

我有一些代码将分组变量指定为字符串。

group_var <- "cyl"
Run Code Online (Sandbox Code Playgroud)

我在 dplyr 管道中使用这个分组变量的当前代码是:

mtcars %>% 
     group_by_(group_var) %>% 
     summarize(mean_mpg = mean(mpg))
Run Code Online (Sandbox Code Playgroud)

我对如何替换已弃用的group_by_函数的最佳猜测group_by是:

mtcars %>% 
     group_by(!!as.name(group_var)) %>% 
     summarize(mean_mpg = mean(mpg))
Run Code Online (Sandbox Code Playgroud)

这有效,但在使用 dplyr 小插图编程中没有明确提及。

是否使用!!as.name()首选方式替换group_by_()group_by()

Dav*_*ald 6

这是在函数内吗?否则我认为这!!as.name()部分是不必要的,group_by_at(group_var)为了简单起见,我会坚持@aosmith的建议。否则,我会这样设置:

examplr <- function(data, group_var){
  group_var <- as.name(group_var)

  data %>% 
    group_by(!!group_var) %>% 
    summarize(mean_mpg = mean(mpg))
}

examplr(data = mtcars,
        group_var = "cyl")
Run Code Online (Sandbox Code Playgroud)

  • 所有这些新的引用和取消引用的东西让我头晕目眩。反正对我来说是新的。 (4认同)
  • 您实际上可以在函数中使用 `group_by_at` 并将变量名称作为字符串直接传递给它(不需要“取消引用”)。 (2认同)