函数输入为变量时的R dplyr Quosure逻辑

R dplyr Quosure logic when function input is a variable

我正在尝试让自定义 group_by 函数使用 quosure。当函数的输入是字段名称时,它工作正常。但是,如果我想创建一个包含要插入到函数中的字段名称的变量,我就会卡住,因为该字段被引用了。任何人都知道如何解决这个问题。请看下面

 groupedMean<-function(field){  
    expr<-enquo(field)

   mtcars%>%
       group_by(!!expr)%>%
       summarise(mean(mpg))  
 }

 #Works
 groupedMean(cyl)

 #Doesn't work
 groupFields<-c("cyl","gear")

 for(var in groupFields){
    print(groupedMean(eval(var)))
 }

一种选择是使用 symrlang

转换它
for(var in groupFields){
     var <- rlang::sym(var)
     print(groupedMean(!!var))
}
# A tibble: 3 x 2
#    cyl `mean(mpg)`
#  <dbl>       <dbl>
#1     4    26.66364
#2     6    19.74286
#3     8    15.10000
# A tibble: 3 x 2
#   gear `mean(mpg)`
#  <dbl>       <dbl>
#1     3    16.10667
#2     4    24.53333
#3     5    21.38000

而不是 printing,为了以后使用,输出可以存储在 list

lst <- setNames(vector('list', length(groupFields)), groupFields)
for(var in groupFields){
   var <- rlang::sym(var)
   lst[[var]] <- groupedMean(!!var)
}
lst