[R] cat and positioning of the output

Philippe Grosjean phgrosjean at sciviews.org
Thu Jun 29 22:53:44 CEST 2006

Dan Gunter wrote:
> =?ANSI_X3.4-1968?Q?J=3Frn_Schulz?= wrote:
>>Hello R users!
>>I like to use cat in a loop. I know, loops are not the best way in R ... but
>>my question: It is possible to overwrite the expression "Reading row: i" in
>>each iteration of the loop (print out in the below loop on the screen) or
>>more particulary to overwrite the counter "i".
>>for(i in 1:header$M){
>>   cat("Reading row: ", i)
>>   SparseIndex[[i]] <- readBin( con, integer(), n=MIndexNumber[i], size=4 )
>>   SparseSignal[[i]] <- readBin( con, numeric(), n=MIndexNumber[i], size=4 )
>>Many thanks
>>J?rn Schulz.
> On a UNIX terminal, adding '\r' will cause the cursor to go back to the 
> beginning of the same line. I can't speak for Windows.
> e.g.
> for ( i in 1:10 ) { cat("Number",i,"\r"); Sys.sleep(1) }; cat("\n")
> -Dan

It works, but I don't like much strange things that can happen with "\r" 
because the caret is located at the beginning of the line. Look at what 
happens if you forgot the latests 'cat("\n")'. Also, note that for RGui 
under windows, you must use flush.console(). So:

 > for (i in 1:10) {
 >    cat("Number",i,"\r")
 >    flush.console()
 >    Sys.sleep(1)
 > }
 > cat("\n")

does the job. The alternative is to use "\b" repeatedly, which is done 
in progress() indeed.

Philippe Grosjean

More information about the R-help mailing list