Код (более простая версия того, в чем я сейчас застрял) работает безупречно с последовательным бэкэндом:
regis <-list()
EOFvalues <-array(,c(5,6))
EOFvaluesM <-array(,c(5,6))
for(j in 1:6) {
for(k in 1:5){
loc_no <- (j-1)+k
regis[[j]]=c(j,k)
EOFvalues[k,j]=j+k
EOFvaluesM[k,j]=j*k
}}
с результатами как 1: regis (список):
2: EOFvalues (массив):
3: EOFvaluesM (массив):
но как только я запускаю его, используя параллельный бэкэнд
regis <-list()
EOFvalues <-array(,c(5,6))
EOFvaluesM <-array(,c(5,6))
library(doParallel)
cores0=detectCores()
cl<-makeCluster(cores0, type= "SOCK" ,outfile="")
registerDoParallel(cl)
oper <- foreach(j=1:6, .combine='c',.export = c("%dopar%"), .packages = c("doParallel")) %dopar% {
foreach(k=1:5,.export = c("%dopar%"), .packages = c("doParallel")) %do% {
regis[[j]]=c(j,k)
EOFvalues[k,j]=j+k
EOFvaluesM[k,j]=j*k
par_res <- list(regis,EOFvalues,EOFvaluesM)
}
}
stopImplicitCluster()`
Все результаты довольно перепутаны:
(я имею в виду, что я не получаю результаты, как дает серийный бэкэнд, возможно, это из-за моих скудных знаний о параллелизме в R).
Мне нужно получить аналогичный результат, чтобы продолжить работу в моем проекте и сэкономить память и время (поскольку на самом деле EOFvalues и EOFvaluesM имеют порядок (324 625)). Так что я не могу оставить параллельный бэкэнд. Можно ли восстановить тот же результат, используя этот код? Если так, то как?