Не могу использовать! Arg в dplyr для вызова мутирования - PullRequest
0 голосов
/ 26 января 2019

Я могу использовать !! для фильтрации по заданной пользователем переменной, но не для изменения этой же переменной.Следующая функция выдает ошибку при создании, но она прекрасно работает, если я удаляю вызов mutate.

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

1 Ответ

0 голосов
/ 26 января 2019

Имена столбцов в левом значении присваиваются вместе с оператором присваивания (:=) вместо оператора =.Также имена должны быть либо строковыми, либо символическими.Таким образом, мы можем преобразовать выражение ('y' из enquo) в строку (quo_name) и затем выполнить оценку (!!)

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)

data

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)
...