Как правило, вы почти никогда не хотите использовать parse
и eval
в обычном коде - фактически, их присутствие должно быть предупреждением о том, что вы думаете о проблеме неправильно. Это специализированные инструменты для низкоуровневого программирования R, которые должны полностью отсутствовать в коде анализа.
Во-первых, в вашем коде вероятной причиной путаницы является использование двойных кавычек вокруг имен столбцов, поэтому вы думаете, что они струны. На самом деле это не так! R молча принимает строковые литералы в нескольких местах вместо имен переменных, и обрабатывает их как имена переменных .
Таким образом, ваш исходный код фактически эквивалентен
transmute(aggr1 = as.numeric(val1) + as.numeric(val2), aggr2 = as.numeric(val3) + as.numeric(val4))
… без кавычек , и это различие имеет решающее значение для понимания того, что происходит.
Теперь, как это обобщить, чтобы вы могли на самом деле использовать разные имена столбцов (т.е. вычисленные значения)? Вкратце, вам нужно использовать !!
перед именем столбца и :=
вместо =
.
!!
заставляет dplyr интерпретировать имена столбцов как вычисленные значения и использование :=
вместо =
не позволяет R видеть значения как имена аргументов вызова функций (это работает в обход ограничений R, поскольку !! x = y
будет синтаксически недопустимым).
Например:
prefix = 'aggr'
data_aggr = df %>%
transmute(
!! paste0(prefix, 1) := as.numeric(val1) + as.numeric(val2),
!! paste0(prefix, 2) := as.numeric(val3) + as.numeric(val4)
)
Как именно вычисляются имена столбцов, очевидно, зависит от вашей конкретной c проблемы.
Детали того, как динамически вызывать функции dplyr, объясняются в виньетке программирование с dplyr .