How can I `print` or `cat` when using parallel
Solution 1
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
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.
Corvus
Updated on June 06, 2022Comments
-
Corvus almost 2 years
If I call a function using
parSapply
thenprint
,message
orcat
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)
-
Ben almost 11 yearsA slightly different approach to getting a progress log file when using
%dopar%
is documented in detail here: viksalgorithms.blogspot.com/2012/02/… -
Steve Weston over 10 years
outfile=""
doesn't work on Windows with Rgui, but it does with Rterm. -
MichaelChirico about 8 yearsIt's strange how poorly-documented this is. I had to pore through source code for a good 15 minutes before I found exactly what
outfile
is doing (basically being added to a command being sent to terminal asOUT=
outfile
). Sending to terminal with""
is consistent with, e.g.,write.table
, which takes the connection""
to meanstdout
-
JMT2080AD over 6 yearsUsing the setting
outfile = ""
to print to the terminal works for me using emacs and ESS in Windows.