[R] cat(), Rgui, and support for carriage return \r...
Duncan Murdoch
murdoch at stats.uwo.ca
Sat Mar 18 20:39:16 CET 2006
On 3/17/2006 9:44 AM, Jeffrey Racine wrote:
> Hi, and thanks in advance for your time.
>
> Background - I am working on a package and wish to have a routine's
> progress reported. The routine can take some time, and I would like to
> inform the user about the routine's progress. I have scoured the
> archives but to no avail, so would like to solicit input from this list.
>
> I am successfully using
>
> cat("\rBootstrap replication ", i, " of ", boot.num,)
> flush.console() # To flush stdout on windows systems
>
> which works as expected on *NIX systems and using Rterm under windows.
> However, under Rgui the carriage return \r is ignored, and I certainly
> don't want to use the newline escape sequence \n. Under Rgui it appears
> as
>
> Bootstrap replication 1 of 399Bootstrap replication 2 of 399Bootstrap...
>
> but I want it to function properly if at all possible.
>
> My question is simply whether there is a portable way to implement this
> so that it works regardless of the R platform the user may be working
> on?
>
> Many thanks for any/all suggestions.
I've just been looking at the source code for this. I think it will be
relatively easy to make \r in Rgui do a destructive CR (i.e. it will
return to the start of the line, but clear any existing characters).
I'll play around a bit and then do that for R-devel.
In the meantime, \b does a destructive backspace, so you can get the
effect you want with something like this:
msg <- ""
for (i in 1:1000) {
cat(rep("\b", nchar(msg)), sep="")
msg <- paste("Message ", i)
cat(msg)
flush.console()
}
This seems to work in Rgui, Rterm, (and R on Unix, if you get rid of the
flush.console call).
Duncan Murdoch
More information about the R-help
mailing list