2017-08-07 39 views
1

我意識到這似乎接近於已經問過的其他問題,它似乎回答https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html 但我下面顯示的東西似乎遵循,但建議,但沒有成功。 這裏是數據:傳遞一個列名到一個函數使用dplyr mutate而不使用depreciated 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

您可以使用quo_namez轉換爲列名稱的字符串。

你的函數可以再看看這樣的:

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 
相關問題