【发布时间】:2014-12-05 10:31:17
【问题描述】:
为了查看在foreach() 循环中运行的函数输出的控制台消息,我遵循this guy 的建议并添加了sink() 调用,如下所示:
library(foreach)
library(doMC)
cores <- detectCores()
registerDoMC(cores)
X <- foreach(i=1:100) %dopar%{
sink("./out/log.branchpies.txt", append=TRUE)
cat(paste("\n","Starting iteration",i,"\n"), append=TRUE)
myFunction(data, argument1="foo", argument2="bar")
}
但是,在第 77 次迭代中,我收到错误“接收器堆栈已满”。 well-answered questions 在使用 for 循环时避免此错误,但不是 foreach。将原本隐藏的 foreach 输出写入文件的最佳方法是什么?
【问题讨论】:
-
您实际上是在并行运行吗?你为什么在文件中使用
sink和cat? -
我正在使用
foreach对列表的 100 个元素并行运行相同的计算密集型函数,因为使用for循环甚至mclapply会花费很长时间(我已经试过了,速度要慢得多)。我使用sink和cat是因为链接页面建议我这样做,并且因为它有助于跟踪foreach循环正在进行的迭代。 -
您没有回答问题。您没有展示如何设置集群。此外,您链接到的教程不使用
cat的file参数。 -
如果您正确设置集群,
mclapply不应比foreach慢。 -
抱歉,我实际上并没有在
cat中使用文件参数——这是我正在试验的东西。我打错了代码。我现在就修。