gpt4 book ai didi

r - 使用 sink() 在 foreach 循环中捕获消息时如何避免 'sink stack is full' 错误

转载 作者:行者123 更新时间:2023-12-03 15:38:51 30 4
gpt4 key购买 nike

为了查看在 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 输出写入文件的最佳方法是什么?

最佳答案

这在我的 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)
}

关于r - 使用 sink() 在 foreach 循环中捕获消息时如何避免 'sink stack is full' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26296288/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com