使用foreach和doMC,有没有办法让cat
和/或message
在并行运行时打印到屏幕上?例如:
> library(foreach)
>
> tmp <- foreach(i=1:3) %do%
+ cat("sqrt(i) =", sqrt(i), "\n")
sqrt(i) = 1
sqrt(i) = 1.414214
sqrt(i) = 1.732051
>
> tmp <- foreach(i=1:3) %do%
+ message("i^2 =", i^2, "\n")
i^2 =1
i^2 =4
i^2 =9
>
> library(doMC)
> registerDoMC(2)
>
> tmp <- foreach(i=1:3) %dopar%
+ cat("sqrt(i) =", sqrt(i), "\n")
>
> tmp <- foreach(i=1:3) %dopar%
+ message("i^2 =", i^2, "\n")
>
> sessionInfo()
R Under development (unstable) (2014-01-29 r64898)
Platform: x86_64-apple-darwin10.8.0 (64-bit)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] parallel stats graphics grDevices utils datasets
[7] methods base
other attached packages:
[1] doMC_1.3.2 iterators_1.0.6 foreach_1.4.1
loaded via a namespace (and not attached):
[1] codetools_0.2-8 compiler_3.1.0 tools_3.1.0
谢谢,
最高
答案 0 :(得分:2)
默认情况下,当使用带有doMC后端的foreach时,不会重定向来自worker的stdout,因此除非您在Mac OS X上使用诸如R.app的GUI或在Windows上使用Rgui,否则应显示输出。我刚尝试在我的Mac上进行快速测试,似乎RStudio也从doMC / mclapply创建的工作人员那里扔掉了stdout。
从终端执行R时,我使用R 3.0.2和“R Under development(unstable)(2014-02-13 r64986)”在Mac OS X 10.7.5上看到工作者输出。由于您使用的是较旧的开发版本,因此可能会出现一个随后已修复的问题。
您可以尝试使用特定于doMC的“静默”选项明确打开输出:
> opts <- list(silent=FALSE)
> tmp <- foreach(i=1:3, .options.multicore=opts) %dopar% message('i^2 = ', i^2)
i^2 = 1
i^2 = 4
i^2 = 9
这会导致使用mc.silent=FALSE
调用mclapply。如果这没有帮助,我建议尝试最适合我的开发版本。