R parallel:错误“找不到函数”%do%“”

时间:2017-01-19 10:17:17

标签: r cross-platform doparallel

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

  result = foreach (r = rseq, .combine=c) %dopar% {
    K=apply(D, 1, function(v){sum(v <= r)-1})
    L=sqrt((diff(xlim)+2*max(rseq))*(diff(ylim)+2*max(rseq))* K /(pi * (dim(tor)[1]-1)))
    foreach (th = thseq) %do% {
      C=which(L>=th)
      if (length(C)>0){
        G = graph.adjacency(D[C,C] < 2 *r)
        lab=clusters(G, "weak")
        labels=(N+1):(2*N); labels[C]=lab$membership
      }
      else labels=1:N
      s=0
      if (score){
        s=scorewprec(labels=labels, pts=pts, sds=sds, xlim=xlim, ylim=ylim, psd=psd, minsd=minsd, maxsd=maxsd, useplabel=useplabel, alpha=alpha, pb=pb)
      }
      list("scale" = r, "score" = s, "thresh" = th, "labels" = labels)
    }
  }

代码运行正常:

R version 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%“”       电话:sapply - &gt; lapply - &gt;乐趣 - &gt; Kclust - &gt; %dopar% - >       执行暂停

可能是什么问题?

1 个答案:

答案 0 :(得分:1)

正如@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% {
  #...
  }
}

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