我意识到这似乎与已经提出的其他问题很接近,并且似乎在 https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html 上得到了解答。 但我下面显示的内容似乎遵循了该建议,但没有成功。 数据如下:
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 ="
最佳答案
要设置变量名称,您需要在左侧使用一个字符串和 :=
而不是 mutate
中的 =
。
您可以使用 quo_name
将 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
关于r - 使用 dplyr mutate 将列名传递给函数,而不使用折旧的 mutate_,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45556169/