2014-02-12 2 views
1

foreach 및 doMC를 사용하면 병렬로 실행할 때 cat 및/또는 message을 화면에 인쇄 할 수 있습니까? 예를 들면 다음과 같습니다 doMC의 백엔드와 foreach 문을 사용하는 경우 리디렉션되지 않으므로 출력이 표시되어야하는 근로자 표준 출력다중 코어로 로그 인쇄

> 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

, 당신은 사용하지 않는 Mac OS X의 R.app 또는 Windows의 Rgui와 같은 GUI 방금 Mac에서 간단한 테스트를 시도했는데 RStudio가 doMC/mclapply에서 만든 직원의 표준 출력을 버리는 것으로 보입니다.

터미널에서 R을 실행할 때 Mac OS X 10.7.5에서 R 3.0.2와 "R Under development (unstable) (2014-02-13 r64986)"를 사용하여 작업자 출력을 봅니다. 약간 오래된 개발 빌드를 사용하고 있기 때문에 나중에 수정 된 문제가있을 수 있습니다.

당신은 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.app GUI 또는 RStudio에서가 아니라 터미널에서 R을 실행할 때 출력을 표시합니다. 이러한 환경에서이 솔루션을 작동시킬 수있는 방법이 있습니까? –