При работе с конвейером dplyr
я хотел бы передать функцию mutate
, используя NSE
, с именем функции, передаваемым из вектора.
Пример
Дан вектор двух имен функций:
funs <- c("sum", "mean")
Я хотел бы использовать первое значение для получения суммы:
require(dplyr)
mtcars %>%
group_by(cyl) %>%
mutate_(res = funs[1](hp))
Это приводит к ошибке:
Error in as.lazy_dots(list(...)) : attempt to apply non-function
do.call
Решение на основе do.call
, кажется, дает некоторые результаты для суммы:
mtcars %>%
group_by(cyl) %>%
mutate_(res = do.call(funs[1], .))
но это не удается при попытке использовать mean
:
>> mtcars %>%
+ group_by(cyl) %>%
+ mutate_(res = do.call(funs[2], .))
Error in mean.default(mpg = c(21, 21, 22.8, 21.4, 18.7, 18.1, 14.3, 24.4, :
argument "x" is missing, with no default
Я предполагаю, что это просто не имеет смысла в том, как оно применяется здесь. Отсюда мой вопрос: как использовать nse в dplyr
, поэтому функция может быть передана как строка из вектора?