2014-02-12 1 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  

Спасибо,

Max

ответ

2

По умолчанию, стандартный вывод из рабочих не перенаправляются при использовании Еогеасп с бэкэндом DoMC, поэтому выход должен отображаться, если вы не используете графический интерфейс, такой как R.app на Mac OS X или Rgui в Windows. Я просто попробовал быстрый тест на своем Mac, и кажется, что RStudio также отбрасывает stdout от рабочих, созданных doMC/mclapply.

При выполнении R с терминала я вижу рабочий выход в Mac OS X 10.7.5 с использованием R 3.0.2 и «R В стадии разработки (нестабильный) (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

Это решение, похоже, больше не работает с R 3.2.2 (2015-08-14), работающим на Mac OS X 10.10.5. –

+0

@CraigW Вы видите вывод при выполнении 'x <- mclapply (1: 3, message, mc.cores = 3)'? Вы выполняете стандартный интерпретатор R из «Терминала»? –

+0

Я забираю его обратно. Кажется, что вывод выводится при запуске R из терминала, но не из R.app GUI или RStudio. Есть ли способ заставить это решение работать в этих средах? –