我正在使用for循環計算置換測試統計信息。我希望使用並行處理來加速這一點(特別是foreach包中的foreach)。 https://beckmw.wordpress.com/2014/01/21/a-brief-foray-into-parallel-processing-with-r/在R中並行處理的foreach(foreach包)
我的原代碼:
library(foreach)
library(doParallel)
set.seed(10)
x = rnorm(1000)
y = rnorm(1000)
n = length(x)
nexp = 10000
perm.stat1 = numeric(n)
ptm = proc.time()
for (i in 1:nexp){
y = sample(y)
perm.stat1[i] = cor(x,y,method = "pearson")
}
proc.time()-ptm
# 1.321 seconds
然而,當我用foreach循環,我得到的結果要慢得多:
cl<-makeCluster(8)
registerDoParallel(cl)
perm.stat2 = numeric(n)
ptm = proc.time()
perm.stat2 = foreach(icount(nexp), .combine=c) %dopar% {
y = sample(y)
cor(x,y,method = "pearson")
}
proc.time()-ptm
stopCluster(cl)
#3.884 seconds
這是爲什麼我從下面的說明發生了什麼?我做錯了什麼? 謝謝