Я играю с этими фиктивными данными, чтобы попытаться распараллелить их, пока я не смог достичь тех же результатов, что и с непараллелизированным кодом.
Матрица-пустышка:
m <- matrix(1, nrow = 500, ncol = 500)
m[1,1] <- 2 # To check the output keeps rows and columns in same order
m[2,2] <- 2
m[103,203] <- 2
Это работает, как ожидалось:
for (i in 1:dim(m)[1]){
for (j in 1:dim(m)[2]){
m[i,j] <- m[i,j] + 1
}
}
Это не работает, как ожидалось:
cl <- makeCluster(4, type = "SOCK")
registerDoParallel(cl)
output <- foreach(i=1:dim(m)[1]) %dopar% {
df <- data.frame()
for( j in 1:dim(m)[2]){
df[i,j] <- m[i,j] + 1
}
df
}
stopCluster(cl)
Это также:
cl <- makeCluster(4, type = "SOCK")
registerDoParallel(cl)
output <- foreach(i=1:dim(m)[1],.combine='cbind' ) %:%
foreach (j=1:dim(m)[2], .combine='c') %do% {
m[i,j] <- m[i,j] + 1
}
stopCluster(cl)