使用字符串作为输入使用dplyr进行编程

Rai*_*lde 13 r dplyr

我想写一个使用dplyr的函数,我提供变量名作为字符串.不幸的是,dplyr-s使用NSE使它变得相当复杂.从使用dplyr编程我得到以下示例

my_summarise <- function(df, var) {
  var <- enquo(var)

  df %>%
    group_by(!!var) %>%
    summarise(a = mean(a))
}

my_summarise(df, g1)
Run Code Online (Sandbox Code Playgroud)

但是,我想编写功能而不是g1我能提供的功能,"g1"而且我无法解决如何做到这一点.

luk*_*keA 16

Afaik,你可以使用as.namesym(从rlang包中 - 我不知道如果dplyr最终会导入它):

library(dplyr)
my_summarise <- function(df, var) {
  var <- rlang::sym(var)
  df %>%
    group_by(!!var) %>%
    summarise(mpg = mean(mpg))
}
Run Code Online (Sandbox Code Playgroud)

要么

my_summarise <- function(df, var) {
  var <- as.name(var)
  df %>%
    group_by(!!var) %>%
    summarise(mpg = mean(mpg))
}

my_summarise(mtcars, "cyl")
# # A tibble: 3 × 2
#     cyl      mpg
#   <dbl>    <dbl>
# 1     4 26.66364
# 2     6 19.74286
# 3     8 15.10000
Run Code Online (Sandbox Code Playgroud)