如何在foreach循环中导出多个函数或包在" R"

时间:2017-08-18 07:29:37

标签: r foreach doparallel

我尝试使用R中的doParallel包来减少代码的运行时间。

我正在调用一个函数awareRateSIR,在这个函数的主体中使用了一些额外的包。我得到一些错误,如

  

无法找到功能" vcount"和..

我知道vcountigraph中使用的包awareRateSIR的函数,但它并不是唯一的。{1}}。我怎么解决这个问题?我以为我应该传递我的函数awareRateSIR中使用的所有包名,但我不知道如何在foreach中导出多个函数或者如何导出多个包名称。

这是我的代码:

tp<-foreach(i=1:iter,  .inorder = FALSE, .export = "awareRateSIR",
          .packages = "igraph", .packages="doParallel")%dopar%{
tp <- awareRateSIR(graphContact, graphCom,state)
return(tp)
}

如果我没有通过这些软件包,我会收到错误状态,如果我通过所有软件包,我会收到一些函数错误:

  

foreach中的错误(i = 1:iter,.inorder = FALSE,.export =   &#34; awareRateSIR&#34;,:正式参数&#34; .packages&#34;匹配多个   实际论点&#34;

提前致谢

2 个答案:

答案 0 :(得分:8)

您应该使用c函数传递所需的所有包,如下所示:

tp<-foreach(i=1:iter,  .inorder = FALSE, .export = "awareRateSIR",
          .packages = c("igraph", "doParallel"))%dopar%{
tp <- awareRateSIR(graphContact, graphCom,state)
return(tp)
}

答案 1 :(得分:0)

通常,在使用foreach时,您不需要导出任何变量,函数或包。

对于变量和函数,它们只需要与foreach语句位于相同的环境中(更好的方法是创建一个只传递所需内容的函数)。

当其他软件包需要函数时,您只需使用package::function,就像内部软件包一样。