我试图使用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)))
}
答案 0 :(得分:3)
一种选择是使用sym
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
而不是print
,以供以后使用,输出可以存储在list
lst <- setNames(vector('list', length(groupFields)), groupFields)
for(var in groupFields){
var <- rlang::sym(var)
lst[[var]] <- groupedMean(!!var)
}
lst