我可以使用!!
来过滤用户提供的变量,但不能修改该变量。以下函数在创建时会引发错误,但是如果我删除mutate调用,该函数就可以正常工作。
avg_dims <- function(x, y) {
y <- enquo(y)
x %>%
filter(!!y != "TOTAL") %>%
mutate(!!y = "MEAN") %>%
group_by(var1, var2)
}
答案 0 :(得分:3)
在分配的lhs上对列的命名与分配运算符(:=
)一起使用,而不是=
运算符。另外,名称应为字符串或符号。因此,我们可以将法定货币(从enquo
到字符串(quo_name
的y),然后进行评估(!!
)
avg_dims <- function(x, y) {
y <- enquo(y)
y1 <- rlang::quo_name(y)
x %>%
filter(!!y != "TOTAL") %>%
mutate(!!y1 := "MEAN") %>%
group_by(var1, var2)
}
avg_dims(df1, varN)
set.seed(24)
df1 <- data.frame(var1 = rep(LETTERS[1:3], each = 4),
var2 = rep(letters[1:2], each = 6),
varN = sample(c("TOTAL", "hello", 'bc'), 12, replace = TRUE),
stringsAsFactors = FALSE)