2017-08-07 9 views
1

を使用せずにdplyr mutateを使用して関数にカラム名を渡します。これは既に尋ねられた他の質問に近いようですが、https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html と回答しているようですが、ここ はデータです:は、減価償却mutate_

d<-tibble(y=c(1,2,3,NA)) 

働くまず何か:

my.f <- function(df,column_var){ 
    df %>% 
    mutate(z = y) %>% 
    filter(!is.na(z)) 
} 
my.f(d,quo(z)) 

今、私は同じ結果を生成したいのですが、動作しません何か:

my.f <- function(df,column_var){ 
    df %>% 
    mutate(!!column_var = y) %>% 
    filter(!is.na(!!column_var)) 
} 
my.f(d,quo(z)) 

Error: unexpected '=' in: 
" df %>% 
mutate(!!column_var =" 

答えて

2

のために変数名を設定する場合は、左側に文字列があり、=の代わりに:=mutateにある必要があります。

を使用して、zを列名の文字列に変換できます。

my.f = function(df, column_var) { 
    column_var = enquo(column_var) 

    df %>% 
     mutate(!!quo_name(column_var) := y) %>% 
     filter(!is.na(!!column_var)) 
} 

my.f(d, z) 

# A tibble: 3 x 2 
     y  z 
    <dbl> <dbl> 
1  1  1 
2  2  2 
3  3  3 

あなたの関数は、その後のようになります。

関連する問題