【发布时间】:2018-04-26 19:44:14
【问题描述】:
在一个函数中,我想就地更新用户指定的列的值,其中用户指定的列名是通过 enquo() 捕获的。所以,这里有一个简化的例子:
f1 <- function(df, x, y) {
x <- enquo(x)
y <- enquo(y)
df %>%
mutate((!! x) := (!! x)^2,
(!! y) := (!! y)+1)
}
dat <- data.frame(a=1:10, b=10:1)
f1(dat, x=a, y=b)
此操作失败并出现错误:“:= 的 LHS 必须是字符串或符号”。
例如,我也尝试将(!! x) 替换为quo_get_expr(x) 和f_text(x),但得到相同的错误。例如:
f1 <- function(df, x, y) {
x <- enquo(x)
y <- enquo(y)
df %>%
mutate(quo_get_expr(x) := (!! x)^2,
quo_get_expr(y) := (!! y)+1)
}
谁能指出我做错了什么?
我正在使用 R 4.1、dplyr 0.7.4 和 rlang 0.2.0
提前致谢。
【问题讨论】: