У меня есть несколько сложная функция со многими аргументами. Не вдаваясь в подробности, он выполняет некоторые вычисления для data.frame с использованием dplyr и plyr и возвращает data.frame с несколькими прикрепленными столбцами результатов.
У меня есть аргумент для основной переменной группировки и ... для любых дополнительных групп. Я использую эти переменные группировки как с dplyr, так и с plyr.
Бит dplyr был довольно простым - я использовал enquo и !! без проблем. Но я не могу понять, как использовать те же принципы с plyr.
Работает с dplyr.
myfun <- function(data, main_group, ...) {
group <- enquo(main_group)
add_groups <- enquos(...)
data %>%
group_by(!! group, !!! add_groups)
}
mydata <- data.frame(a = 1:3, b = 1:3, c = 1:3, d = 1:3)
myfun(mydata, main_group = a, b, c)
Но не с plyr, и мне нужны оба.
myfun <- function(data, main_group, ...) {
group <- enquo(main_group)
add_groups <- enquos(...)
ddply(data, .(!! group, !!! add_groups), .fun = function(X) { data.frame(result1 = 1, result2 = 1, result3 = 1) })
}
myfun(mydata, main_group = a, b, c)
Полагаю, было бы проще, если бы я мог использовать векторимен строковых переменных в вызове ddply.
ddply(mydata, c("a", "b", "c"), .fun = function(X) { data.frame(result1 = 1, result2 = 1, result3 = 1) })
Но как я могу получить c ("a", "b", "c") внутри функции, если значения аргумента a, b, c?