Использование предложений dplyr с mutate()

Читая руководство по программированию с dplyr, я получаю неожиданную ошибку.

На самом деле, пытаясь примеры с summarize работает совершенно правильно, но если я попробую похожие вещи с mutateкод не будет работать.

Вот мой код:

df = data.frame(A=c(464,3465,48,3415,357,21,657), B=c(12,15,985,35,67,13,467))

df %>% 
  mutate(x = A-B) %>%
  pull(x)
#returns the good output :
#[1]  452 3450 -937 3380  290    8  190

get.diff = function(var1, var2, data=df){
  var1 = enquo(var1)
  var2 = enquo(var2)
  data %>% 
    mutate(x = (!!var1 - !!var2)) %>%
    pull(x)
}
get.diff(A, B)
returns an error

Вот ошибка:

Ошибка в! Var2: неверный тип аргумента

Я много чего перепробовал, но это самое близкое, что я получил к справочным образцам.

Что я упустил?

1 ответ

Решение

Вам просто нужно скобки вокруг каждого "взрыва взрыва" / без кавычек (!!varX):

mutate(x = ((!!var1) - (!!var2))) %>%

Полный код:

df = data.frame(A=c(464,3465,48,3415,357,21,657), B=c(12,15,985,35,67,13,467))

  df %>%
    dplyr::mutate(x = A-B) %>%
    pull(x)
  #returns the good output :
  #[1]  452 3450 -937 3380  290    8  190

  get.diff = function(var1, var2, data=df){
    var1 = enquo(var1)
    var2 = enquo(var2)
    data %>%
      dplyr::mutate(x = ((!!var1) - (!!var2))) %>%
      pull(x)
  }
  get.diff(A, B)

  [1]  452 3450 -937 3380  290    8  190
Другие вопросы по тегам