不能在dplyr中使用!! arg进行突变调用

时间:2019-01-26 17:15:15

标签: r dplyr tidyverse

我可以使用!!来过滤用户提供的变量,但不能修改该变量。以下函数在创建时会引发错误,但是如果我删除mutate调用,该函数就可以正常工作。

avg_dims <- function(x, y) {
  y <- enquo(y)
  x %>%
    filter(!!y != "TOTAL") %>%
    mutate(!!y = "MEAN") %>%
    group_by(var1, var2)
}

1 个答案:

答案 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)