У меня есть ряд операций с кадрами данных, которые я хотел бы ускорить с помощью mclapply()
или других lapply()
подобных функций. Один из самых простых способов борьбы с этим - сделать каждую строку кадра данных небольшим фреймом данных в списке. Я могу сделать это довольно легко с помощью plyr
следующим образом:
df <- data.frame( a=rnorm(1e4), b=rnorm(1e4))
require(plyr)
system.time(myList <- alply( df, 1, function(x) data.frame(x) ))
Как только у меня есть данные в виде списка, я могу легко делать такие вещи, как:
mclapply( myList, function(x) doSomething(x$a) )
Это работает плавно, но у меня довольно много данных, а шаг adply()
довольно медленный. Я попытался использовать многоядерный параллельный бэкэнд на шаге adply
, но он никогда не использовал больше одного процессора, хотя я зарегистрировал 8. Я подозрительно, что параллельная опция может не работать с этим типом проблемы.
Любые советы о том, как сделать это быстрее? Может быть, базовое решение R?