R平行:错误“;找不到函数";%do%"&引用;

R平行:错误“;找不到函数";%do%"&引用;,r,cross-platform,doparallel,R,Cross Platform,Doparallel,这是一段R代码(函数“Kclust”),它试图使用库(doParallel)并行执行任务 result=foreach(r=rseq,.combine=c)%dopar%{ K=apply(D,1,函数(v){sum(v=th) 如果(长度(C)>0){ G=图的邻接(D[C,C]lappy->FUN->Kclust->%dopar%-> 停止执行 有什么问题吗?正如@Roland在他的评论中提到的,您必须将foreach包导出到各个工人。可以这样做: result = foreach (r =

这是一段R代码(函数“Kclust”),它试图使用库(doParallel)并行执行任务

result=foreach(r=rseq,.combine=c)%dopar%{
K=apply(D,1,函数(v){sum(v=th)
如果(长度(C)>0){
G=图的邻接(D[C,C]<2*r)
lab=簇(G,“弱”)
标签=(N+1):(2*N);标签[C]=实验室$membership
}
else标签=1:N
s=0
如果(分数){
s=scorewprec(标签=labels,pts=pts,sds=sds,xlim=xlim,ylim=ylim,psd=psd,minsd=minsd,maxsd=maxsd,useplabel=useplabel,alpha=alpha,pb=pb)
}
列表(“比例”=r,“分数”=s,“阈值”=th,“标签”=标签)
}
}
代码在以下情况下运行良好:

R版本3.0.2(2013-09-25)-“飞盘航行”。 平台:x86_64-pc-linux-gnu(64位)

但是,如果我使用以下命令运行代码:

R版本3.2.3(2015-12-10)-“木制圣诞树”。 平台:x86_64-w64-mingw32/x64(64位)

我明白了

{:任务1失败-“找不到函数“%do%”时出错 呼叫:sappy->lappy->FUN->Kclust->%dopar%-> 停止执行


有什么问题吗?

正如@Roland在他的评论中提到的,您必须将
foreach
包导出到各个工人。可以这样做:

result = foreach (r = rseq, .combine=c, .packages = c("foreach")) %dopar% {
  #some code...
  # now use the foreach function from the foreach package again
  foreach (th = thseq) %do% {
  #...
  }
}

就像这样,您必须将所有使用过的库作为字符向量导出到workers。因此,我添加了
c(“packageA”、“packageB”、“etc.”)

foreach包尚未导出到workers。@Roland感谢您的评论。您能更具体一点吗?
result = foreach (r = rseq, .combine=c, .packages = c("foreach")) %dopar% {
  #some code...
  # now use the foreach function from the foreach package again
  foreach (th = thseq) %do% {
  #...
  }
}