Я использую R
(3.1), plyr
и doMC
в качестве параллельного бэкэнда (насколько мне известно, это единственный параллельный бэкенд, который работает с plyr
)
Мой вопрос в том, как я могу писать глобальные переменные из рабочих потоков. У меня есть этот (очень искусственный) пример:
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 кадра данных, я не могу использовать aaply
или adply
. Пример делает то, что должен делать с parallel=FALSE
. Когда я делаю это параллельно, data.frames результата остаются пустыми. Я знаю, что мне нужно экспортировать глобальные переменные в рабочие процессы, и я пытался использовать .paropts=list(.export=c("result1", "result2"))
, но это не помогает....
Кто-нибудь знает, как экспортировать глобальные переменные в doMC
воркеров? Или есть другое решение, которое заполняет оба data.frames в параллельной среде (мазбе без plyr
?)
library(doParallel);registerDoParallel(2)
будет работать и с plyr. И любой другой параллельный бэкенд (doMPI, doSNOW). - person Marek   schedule 09.09.2014doMC
экспортирует все необходимые plyr параметры. См. комментарий @hadley к этому вопросу: stackoverflow.com/questions/5559287/ - person Jonas   schedule 09.09.2014