2017-04-20 3 views
0

저는 R 및 dplyr 라이브러리가 처음입니다. 함수에서 인수 전달로 변경된 열의 이름을 사용하는 함수를 어떻게 얻을 수 있습니까?함수에 열 이름을 변수로 전달합니다.

예를 들어, "test"를 변형 된 열의 이름으로 사용하려고하지만 "y"가 표시됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 당신은

library(dplyr) 
    d <- data.frame(alpha=1:3, beta=4:6) 
    d 
    compare_status<-function(x,y){ 
     x %>% mutate(y=ifelse(alpha ==2,"G2","0")) 
    } 

    compare_status(d,test) 
+1

어제에 대해서만 토론했습니다. R은 객체의 이름을 평가하지 않는 것에 대해 엄격합니다. 곧이 문제를 해결할 수있는 새로운 dplyr이 출시됩니다. 원한다면 devel 버전을 다운로드하여 테스트 해보십시오. 그리고이 튜토리얼을 통해 읽어보십시오. http://dplyr.tidyverse.org/articles/programming.html –

+0

포인터를 가져 주셔서 감사합니다. 그것은 "돌연변이"하는 기능만을위한 것입니까? – deepseas

+1

아니요, 지금까지 본 이름 위치의 모든 부분에서 엄격합니다. –

답변

2

우리는 다음 문자열로 변환되는 enquo는 입력 인수를 가지고 quosure로 변환

compare_status<-function(x,y){ 
    y <- quo_name(enquo(y)) 
    x %>% 
     mutate(!!y := ifelse(alpha ==2,"G2","0")) 
} 

compare_status(d,test) 
# alpha beta test 
#1  1 4 0 
#2  2 5 G2 
#3  3 6 0 

(곧 0.6.0 발매 예정)이 대한 (STABLE) 버전 dplyr 구문을 사용할 수 있습니다 감사합니다 quo_name으로 지정하고 !! 또는 UQ으로 지정하지 않은 경우 할당의 lhs에 대한 열 이름으로 지정 (:=)

관련 문제