首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >doParallel封装中的前景

doParallel封装中的前景
EN

Stack Overflow用户
提问于 2016-04-06 09:48:15
回答 2查看 1.2K关注 0票数 0

我在for循环环境中使用函数"cop.theta“创建矩阵的代码。

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

我在doParallel包中使用"foreach“编写了一个R代码,以获得与上面生成的代码类似的结果。我的代码如下

代码语言:javascript
复制
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])

但我发现了这个错误

代码语言:javascript
复制
Error: unexpected '=' in "foreach(i=1:6,.combine=matrix(0,6,5,byrow=F)
%dopar%  Mat.corr[i,]="

我哪里出错了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-06 10:07:06

byrow = F旁边缺少一个")“,即

代码语言:javascript
复制
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中才有可能。这意味着,您必须使用.combineforeach()中或在循环完成之后处理合并过程。这里有一个代码片段来澄清我的观点。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2016-04-06 16:07:03

谢谢大家的评论。下面的代码实际上回答了我的问题。

代码语言:javascript
复制
foreach(i=1:6,.combine=rbind) %dopar%  cop.theta(index,EXPR,SURV=survp[,i])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36447450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档