2017-04-20 67 views
0

我對R和dplyr庫相對較新。我怎樣才能得到函數使用變異列的名稱作爲函數中的參數傳遞?將列名作爲變量傳遞給函數

例如,我想「測試」作爲突變列的名稱,但我得到「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

我們可以使用這個開發人員版本dplyr語法(即將發佈0.6.0

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 

enquo採取的輸入參數,並轉換爲quosure,然後將其轉換爲字符串與quo_name和未引用!!UQ作爲列的名稱評估lhs分配(:=