Пакет plyr
имеет множество функций _ply
, в которых первые две буквы относятся к вводу и выводу, так что ddply
принимает ввод данных и выводит данные, а dlply
принимает данные ввод и вывод списка. По разным причинам я обычно предпочитаю использовать пакет dplyr
, а plyr
и dplyr
не очень хорошо работают вместе в одной среде. Есть ли способ реплицировать функциональность «фрейм данных в списке» функции dlply
из plyr
в синтаксисе конвейера dplyr
?
Простой пример функциональности, которую я хотел бы воспроизвести:
data = data.frame(x = rep(seq(from = 1, to = 100, by = 1), times = 3),
y = rnorm(n = 300),
group_var = c(rep("A", 100), rep("B", 100), rep("C", 100)))
spline.fun = function(x, xvar, yvar, ...) {
smooth.spline(x = x[,xvar], y = x[,yvar], ...)
}
spline_list = dlply(data, "group_var", spline.fun, xvar = "x", yvar = "y")
Код, который я хотел бы написать, выглядит примерно так:
spline_list = data %>%
group_by(group_var) %>%
list_mutate(list_element = spline.fun, xvar = x, yvar = y)
но, насколько мне известно, не существует функции dplyr
, которая создает элемент списка так же, как и метод mutate создает новый столбец