2017-12-20 15 views
2

quure를 사용하여 사용자 정의 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