foreach in doParallel包

时间:2016-04-06 09:48:15

标签: r foreach doparallel

我有这个代码用于使用函数从某些计算中创建矩阵 " cop.theta"在for循环环境中

Mat.corr <- matrix(0,6,5,byrow=F)
for (i in 1:6){
Mat.corr[i,]=cop.theta(index,EXPR,SURV=survp[,i])
}

我使用&#34; foreach&#34;写了一个R代码。在doParallel包中获取与上面生成的代码类似的结果。我的代码如下

library(doParallel)
cl <- makeCluster(3) 
registerDoParallel(cl)
getDoParWorkers()
clusterExport(cl, list("QT","EXPR","cop.theta.i"))
clusterEvalQ(cl, library(copula))

foreach(i=1:6,.combine=matrix(0,6,5,byrow=F) %dopar%
Mat.corr[i,]=cop.theta(index,EXPR,QT=survp[,i])

但我收到此错误

Error: unexpected '=' in "foreach(i=1:6,.combine=matrix(0,6,5,byrow=F)
%dopar%  Mat.corr[i,]="

我在哪里错了?

2 个答案:

答案 0 :(得分:1)

byrow = F旁边有一个“)”,即

foreach(i=1:6,.combine=matrix(0,6,5,byrow=F)) %dopar%
  Mat.corr[i,]=cop.theta(index,EXPR,QT=survp[,i])

应该修复此错误。但是,请注意mat.corr[i,]=...循环内的foreach不会将cop.theta操作产生的值写入此特定行,只要您并行运行循环 - 这只是可以使用单核foreach。这意味着,您必须使用.combine内的foreach()或循环结束后处理合并过程。这是一个代码片段,以澄清我的观点。

mat <- matrix(nrow = 3, ncol = 3)

### multi-core -----
foreach(i = 1:nrow(mat)) %dopar% {
  mat[i, ] <- matrix(rep(i, ncol(mat)), nrow = 1)
}

mat
     [,1] [,2] [,3]
[1,]   NA   NA   NA
[2,]   NA   NA   NA
[3,]   NA   NA   NA


### single core -----
foreach(i = 1:nrow(mat)) %do% {
  mat[i, ] <- matrix(rep(i, ncol(mat)), nrow = 1)
}

mat
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    2    2
[3,]    3    3    3

答案 1 :(得分:0)

谢谢大家的意见。以下代码实际上回答了我的问题。

foreach(i=1:6,.combine=rbind) %dopar%  cop.theta(index,EXPR,SURV=survp[,i])