2017-04-20 8 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をリリースされる)、このためのdevelバージョンdplyr構文を使用することができますありがとうquo_nameであり、!!またはUQと表記されていません。アサインされた列の列名として割り当てられます(:=