Rog*_*ger 4 foreach r cat sink
为了看到由foreach()循环中运行的函数输出的控制台消息,我遵循了这个人的建议,并添加了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")
}
Run Code Online (Sandbox Code Playgroud)
然而,在迭代77我得到错误'sink stack is full'.关于在使用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)
}
Run Code Online (Sandbox Code Playgroud)
这个更好:
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
Run Code Online (Sandbox Code Playgroud)
这也有效:
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)
}
Run Code Online (Sandbox Code Playgroud)