函数输入为变量时的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)))
}
一种选择是使用 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
ing,为了以后使用,输出可以存储在 list
lst <- setNames(vector('list', length(groupFields)), groupFields)
for(var in groupFields){
var <- rlang::sym(var)
lst[[var]] <- groupedMean(!!var)
}
lst
我正在尝试让自定义 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)))
}
一种选择是使用 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
ing,为了以后使用,输出可以存储在 list
lst <- setNames(vector('list', length(groupFields)), groupFields)
for(var in groupFields){
var <- rlang::sym(var)
lst[[var]] <- groupedMean(!!var)
}
lst