Может ли mutate_at называть переменную в соответствии с именем функции в оболочке? (дплыр + рланг вопрос) - PullRequest
1 голос
/ 21 марта 2019

Я хочу создать функцию, которая мутирует все переменные, указанные в ..., с определенной метрикой, указанной аргументом метрики. Я использую mutate_at в функции и хочу, чтобы она переименовала переменную с помощью «var.functionname». Функция выглядит следующим образом:

seasonAggregator <- function(.data, ..., metric = "sum") {
  # all variables in ... will be accumulated
  metric <- sym(metric)
  name <- ensym(metric)
  print(paste0("Metric for accumulation was: ", metric))
  .data <- .data %>% mutate_at(vars(...), .funs = list(!!name := metric)) # HERE IS THE ISSUE
  return(.data)
}

Как я могу указать функцию в аргументе метрики как таковую, чтобы mutate_at использовал имя функции для переименования переменных?

Лучший Мориц!

1 Ответ

0 голосов
/ 22 марта 2019

@ Moody_Mudskipper правильно.Вы хотите использовать rlang::list2(), который поддерживает квази-цитату.Кроме того, вы, вероятно, хотите summarize_at, а не mutate_at, так как вы накапливаете через sum.

seasonAggregator <- function(.data, ..., metric = "sum") {
  ## all variables in ... will be accumulated
  print(paste0("Metric for accumulation was: ", metric))
  .data <- .data %>% 
      summarize_at(vars(...), .funs = rlang::list2(!!metric := sym(metric)))
  return(.data)
}

seasonAggregator( mtcars, mpg, cyl )
# [1] "Metric for accumulation was: sum"
#   mpg_sum cyl_sum
# 1   642.9     198

seasonAggregator( mtcars, mpg, cyl, metric="mean" )
# [1] "Metric for accumulation was: mean"
#   mpg_mean cyl_mean
# 1 20.09062   6.1875
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...