How can I `print` or `cat` when using parallel

RIoParallel Processing

R Problem Overview


If I call a function using parSapply then print, message or cat statements inside that function don't seem to output to the console.

My process takes a very long time, so I need some way of seeing the progress and getting the results output as they are done. Are there any special commands that would allow me to print to the console from a parallel process?

Example:

library(parallel)

oneloop = function(x) {
  for(i in 1:50) {
    a = rnorm(100000)
    a = sort(a)
  }
  print(x)
  message(x)
  cat(x)
}

cl <- makeCluster(5)
output = parSapply(cl, 1:10, oneloop)
stopCluster(cl)

R Solutions


Solution 1 - R

Using outfile param in makeCluster you can redirect the output to a file and then check that file to see how your program progresses.

Interestingly on a Linux machine setting it to "" outputs to the console, but that doesn't work for me on a Windows machine. File output works on both.

Solution 2 - R

I am using makeCluster with outfile on Windows with doParallel package version 1.0.8. I'm able to tail outfile using a simple Powershell command powershell Get-Content c:/path/to/log/mylog.txt -wait. Works for me.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionCorvusView Question on Stackoverflow
Solution 1 - ReddiView Answer on Stackoverflow
Solution 2 - RDaisuke AramakiView Answer on Stackoverflow