Применить список функций к одной матрице одновременно - PullRequest
1 голос
/ 24 сентября 2019

У меня есть матрица / фрейм данных с 10 столбцами и 1.000.000 строк.Теперь я хочу применить 20 различных функций к этой матрице и сохранить результаты.Каждая функция похожа на

df %>%  group_by(`column1`, `column2`, `column3`, `column4`) %>% filter (n()>20 )

После этой функции я хочу сохранить этот кадр матрицы / данных в список, поэтому должен быть список с 20 различными матрицами / кадрами данных.

Я делаю это в цикле, но это очень медленно.Я сделал несколько попыток с apply, но не мог понять, что мне не хватает.Моя настоящая попытка:

apply(X=df,MARGIN=c(1,2),FUN=function(df) df %>%  group_by(`column1`, `column2`, `column3`, `column4`) %>% filter (n()>20 ))

Выдает ошибку:

Ошибка в UseMethod ("group_by_"): нет применимого метода для group_by_, примененного к объекту класса"персонаж"

Я чувствую запах, что я не далеко от решения.Можете ли вы дать мне подсказку?

Спасибо и приветствия

1 Ответ

1 голос
/ 24 сентября 2019

Вот пример.Здесь funs содержит имена применяемых функций, а ml - результирующий список.Надеюсь, что это дает вам достаточно подсказок для достижения того, что вы хотите.Пожалуйста, предоставьте некоторые данные, если вам нужна помощь в решении вашей конкретной проблемы.

funs <- c("sqrt", "log", "exp")

m <- matrix(runif(1.e4), 100, 100)

am <- function(f, m){
  apply(m, MARGIN = 1:2, match.fun(f))
}

ml <- lapply(funs, am, m = m)
...