我一直试图从foreach循环R中显示一些输出。可重现的例子是
cl <- makeCluster(2)
registerDoParallel(cl)
ptm1 <- proc.time()
foreach (i = 1:50, .packages = c("MASS"), .combine='+') %dopar% {
ginv(matrix(rexp(1000000, rate=.001), ncol=1000))
if (i >49){
cat("Time taken", proc.time() - ptm1)
}
}
我希望能够显示时间。但是,这并没有显示任何内容。您能否建议在foreach循环中捕获消息并在循环结束时显示的方法。
答案 0 :(得分:2)
我不确定是否有办法输出到屏幕,但您可以使用sink
函数轻松输出到日志文件
ptm1 <- proc.time()
foreach (i = 1:50, .packages = c("MASS"), .combine='+') %dopar% {
ginv(matrix(rexp(1000000, rate=.001), ncol=1000))
if (i >49){
sink("Report.txt", append=TRUE) #open sink file and add output
cat("Time taken", proc.time() - ptm1)
}
}
编辑:正如@Roland指出的那样,如果你想要捕获每次迭代的输出而不仅仅是最后一次迭代,这可能会很危险,因为你不希望工人互相辱骂。他在评论中链接到了这个场景的更好的选择。