Feature request: txtProgressBar with ability to write to arbitrary stream
On 15/03/2011 8:46 AM, Matt Shotwell wrote:
Here's a temporary fix; reassign 'cat' in the environment of
'txtProgressBar':
tpbEnv<- new.env()
assign("cat", function(...) cat(file=stderr(),...), tpbEnv)
environment(txtProgressBar)<- tpbEnv
I would suggest renaming the function as well. What's done above creates a new function called txtProgressBar, it doesn't modify the original one, so depending on scoping issues it may appear to only work sometimes. But if you did stderrProgressBar <- txtProgressBar environment(stderrProgressBar) <- tpbEnv you'll get clear messages if it is out of scope when you try to use it. Duncan Murdoch
Best, Matt On 03/15/2011 05:37 AM, Andreas Borg wrote:
Hi all, I use txtProgressBar to monitor progress of large computations. What I miss is the ability to redirect the progress bar to a stream other than stdout, specifically to the message stream. This would be useful for running Sweave scripts: When redirected to stderr, the bar could be visible even though console output is diverted to the output file (and there would be no cluttering of the generated latex). I'd suggest the following changes to txtProgressBar: - a new argument 'file' (compare to 'cat') which defaults to stderr() (there might be reasons to use stdout(), but I believe a progress bar is mostly intended as a diagnostic tool and not for console output, which is printed or saved in some cases). - the calls to 'cat' that update the progress bar get 'file = file' as additional argument so that output is redirected as desired. In case anyone from the core team is willing to incorparate this idea, I attached the patch file for the necessary changes below. Best regards, Andreas 3c3 < width = NA, title, label, style = 1) ---
> width = NA, title, label, style = 1, file=stderr())
23c23 < cat(paste(rep.int(char, nb-.nb), collapse="")) ---
> cat(paste(rep.int(char, nb-.nb), collapse=""), file = file)
27c27 < "\r", paste(rep.int(char, nb), collapse=""), sep = "") ---
> "\r", paste(rep.int(char, nb), collapse=""), sep = "", file = file)
38c38
< cat("\r", paste(rep.int(char, nb), collapse=""), sep = "")
---
> cat("\r", paste(rep.int(char, nb), collapse=""), sep = "", file = file)
42c42 < "\r", paste(rep.int(char, nb), collapse=""), sep = "") ---
> "\r", paste(rep.int(char, nb), collapse=""), sep = "", file = file)
54c54
< cat(paste(c("\r |", rep.int(" ", nw*width+6)), collapse=""))
---
> cat(paste(c("\r |", rep.int(" ", nw*width+6)), collapse=""), file =
file) 59c59 < ), collapse="")) ---
> ), collapse=""), file = file)
68c68
< cat("\n")
---
> cat("\n", file = file)