2

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

 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)))
 }
4

1 回答 1

3

一种选择是使用symfrom转换它rlang

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
于 2017-12-20T16:48:30.143 回答