在R中的foreach循环中打印输出

时间:2018-06-05 06:36:58

标签: r parallel-processing

我一直试图从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循环中捕获消息并在循环结束时显示的方法。

1 个答案:

答案 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指出的那样,如果你想要捕获每次迭代的输出而不仅仅是最后一次迭代,这可能会很危险,因为你不希望工人互相辱骂。他在评论中链接到了这个场景的更好的选择。