当使用接收器()在foreach循环中捕获消息时,如何避免“接收器堆栈已满”错误 [英] How to avoid 'sink stack is full' error when sink() is used to capture messages in foreach loop
本文介绍了当使用接收器()在foreach循环中捕获消息时,如何避免“接收器堆栈已满”错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
为了查看在 foreach()
循环中运行的函数输出的控制台消息,我遵循了这家伙,并添加了一个 sink()
调用,如下所示:
In order to see the console messages output by a function running in a foreach()
loop I followed the advice of this guy and added a sink()
call like so:
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中,我收到了错误的接收器堆栈已满'。有回答了有关在使用for循环时避免此错误的问题,但不是foreach。将原本隐藏的foreach输出写入文件的最佳方法是什么?
However, at iteration 77 I got the error 'sink stack is full'. There are well-answered questions about avoiding this error when using for-loops, but not foreach. What's the best way to write the otherwise-hidden foreach output to a file?
推荐答案
这在我的Mac上运行没有错误:
This runs without errors on my Mac:
library(foreach)
library(doMC)
cores <- detectCores()
registerDoMC(cores)
X <- foreach(i=1:100) %dopar%{
sink("log.branchpies.txt", append=TRUE)
cat(paste("\n","Starting iteration",i,"\n"))
sink() #end diversion of output
rnorm(i*1e4)
}
这更好:
library(foreach)
library(doMC)
cores <- detectCores()
registerDoMC(cores)
sink("log.branchpies.txt", append=TRUE)
X <- foreach(i=1:100) %dopar%{
cat(paste("\n","Starting iteration",i,"\n"))
rnorm(i*1e4)
}
sink() #end diversion of output
这也可行:
library(foreach)
library(doMC)
cores <- detectCores()
registerDoMC(cores)
X <- foreach(i=1:100) %dopar%{
cat(paste("\n","Starting iteration",i,"\n"),
file="log.branchpies.txt", append=TRUE)
rnorm(i*1e4)
}
这篇关于当使用接收器()在foreach循环中捕获消息时,如何避免“接收器堆栈已满”错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文