2014-02-12 110 views
1

使用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  

感謝,

最大

回答

2

默認情況下,從工人使用標準輸出的foreach與DOMC後端時,應顯示輸出不重定向,所以,除非你使用一個GUI,如Mac OS X上的R.app或Windows上的Rgui。我只是在我的Mac上試過了一個快速測試,看起來RStudio也拋棄了doMC/mclapply創建的工作者的stdout。

從終端執行R時,使用R 3.0.2和「R開發中(不穩定)(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 

這將導致mclapply與mc.silent=FALSE被調用。如果這沒有幫助,我建議嘗試最適合我的開發版本。

+0

此解決方案似乎不再適用於在Mac OS X 10.10.5上運行的R 3.2.2(2015-08-14)。 –

+0

@CraigW當你執行'x < - mclapply(1:3,message,mc.cores = 3)'時你會看到輸出嗎?你是否從「終端」執行標準R解釋器? –

+0

我收回。似乎在從終端運行R時顯示輸出,但不能從R.app GUI或RStudio運行。有什麼辦法可以讓這個解決方案在這些環境中工作嗎? –