Я использую R
(3,1) и plyr
и doMC
как параллельный бэкэндом (насколько я знаю, что это только параллельно бэкенд, который работает с plyr
)Plyr, DoMC и глобальные переменные
Мой вопрос, как я могу написать глобальные переменные из рабочих потоков. У меня есть это (очень искусственный) пример:
library(doMC)
library(plyr)
registerDoMC(cores=2)
result1 = data.frame(id=c(1:3), a=NA)
result2 = data.frame(id=c(1:3), b=NA)
f = function(x){
result1[ result1$id==x$id, "a"] <<- x$a
result2[ result2$id==x$id, "b"] <<- x$b
}
data = data.frame(id=c(1:3), a=c(4:6), b=c(7:9))
a_ply(data, .margins=1, .fun=f, .parallel=T)
Как я хочу, чтобы заполнить 2 dataframes я не могу использовать aaply
или adply
. Пример делает то, что он должен делать с parallel=FALSE
. Когда я делаю это параллельно, результат data.frames остается пустым. Я знаю, что мне приходится экспортировать глобальные переменные в рабочих, и я пытался использовать .paropts=list(.export=c("result1", "result2"))
, но это не помогает.
Кто-нибудь знает, как экспортировать глобальные переменные в doMC
работников? Или есть другое решение, которое заполняет как data.frames в параллельной среде (mazbe без plyr
?)
OT: 'library (doParallel); registerDoParallel (2)' будет работать и с plyr. И каждый другой параллельный бэкэнд (doMPI, doSNOW). – Marek
no ... 'doMC' экспортирует все параметры plyr. См. Комментарий @hadley по этому вопросу: http://stackoverflow.com/questions/5559287/how-do-i-make-dosmp-play-nicely-with-plyr – Jonas
Было три года назад;) – Marek