2017-12-20 23 views
2

私はquostを使って作業するカスタムのgroup_by関数を取得しようとしています。関数への入力がフィールドの名前である場合はうまく動作します。しかし、関数に挿入するフィールドの名前を含む変数を作成したい場合は、フィールドが引用されているのでスタックされます。誰もがこれを回避する方法を知っています。R dplyr関数入力が変数であるときの引き継ぎロジック

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

答えて

2

一つのオプションは、以下を参照してくださいすると、後で使用するために、代わりにprint INGの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 

からsymを使用して、それを変換することで、出力はlist

に保存することができます
lst <- setNames(vector('list', length(groupFields)), groupFields) 
for(var in groupFields){ 
    var <- rlang::sym(var) 
    lst[[var]] <- groupedMean(!!var) 
} 
lst 
関連する問題