R: преобразование каждой строки кадра данных в элемент списка

У меня есть ряд операций с фреймами данных, которые я хотел бы ускорить с помощью 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?

18
задан JD Long 24 February 2011 в 21:32
поделиться