[R] How to defeat buffering in Rgui?

jim holtman jholtman at gmail.com
Fri Jun 29 20:44:28 CEST 2012


One of the things that you should learn is how to profile (Rprof) your
code to see where time is being spent.  If you did, you would have
seen that all the time is being spent in 'flush.console'.  As was
pointed out in a previous response, only call it when something is
printed.

  0  31.1 root
  1.   31.1 flush.console
  1.    0.0 %%
  1.    0.0 sin
  1.    0.0 cat

If you modify your code:

for(i in 1:1e4){
   tst <- sin(i)
   if((i%%1e2)==0)cat(i, "")
   if((i%%1e3)==0){cat('\n'); flush.console()}
   # flush.console()
}


You will notice a very large speedup.

  0   0.5 root
  1.    0.4 flush.console
  1.    0.0 cat
  1.    0.0 ==




On Fri, Jun 29, 2012 at 1:15 PM, Spencer Graves
<spencer.graves at structuremonitoring.com> wrote:
> Dear Prof. Ripley:
>
>
>      Thanks for the reply.  Unfortunately, flush.console() seems to lock up
> my system.  I tried the following:
>
>
>
> for(i in 1:1e7){
>    tst <- sin(i)
>    if((i%%1e5)==0)cat(i, "")
>    if((i%%1e6)==0)cat('\n')
>    flush.console()
> }
>
>
>      This slows down Rgui 2.15.1 (32-bit) by a factor of roughly 350:  In
> Rterm (64-bit), on my dual core 64-bit Windows 7 system, this ran to
> completion in 1 minute;  this same code without flush.console() ran to
> completion in 35 seconds in Rgui 2.15.1 (64-bit), then presented the
> display.  Watching it run in Rgui, it seemed to consume roughly half of one
> CPU while making very slow progress.  I started timing it when it displayed
> 200000;  24 minutes later, I noticed it was displaying 900000.  That
> produces an estimate of 340 minutes to complete.
>
>
>      I'd like to use this to give users (e.g., of a CRAN package) a progress
> report on long computations:  Otherwise, a user doesn't know if the
> computation will every complete.
>
>
>      Suggestions?
>
>
>      Thanks,
>      Spencer
>
>
>
> On 6/29/2012 12:12 AM, Prof Brian Ripley wrote:
>>
>> See the posting guide: this is in the FAQ which you are expected to
>> consult before posting. See
>>
>>
>> http://cran.r-project.org/bin/windows/base/rw-FAQ.html#The-output-to-the-console-seems-to-be-delayed
>>
>> and ?flush.console .
>>
>> On 29/06/2012 08:01, Spencer Graves wrote:
>>>
>>> Hello, All:
>>>
>>>
>>>       Does anyone know how to defeat buffering of output to the console
>>> from Rgui?  I routinely print progress reports to the console from
>>> within Rterm running under Emacs with ESS (Emacs Speaks Statistics); see
>>> the example below.  However, when I run the same example under Rgui, it
>>> queues all the output until the computations are complete.
>>>
>>>
>>>       How can I monitor the progress of computations in both Rgui and
>>> Rterm?
>>>
>>>
>>>       Consider the following:
>>>
>>>
>>> for(i in 1:1e7){
>>>     tst <- sin(i)
>>>     if((i%%1e5)==0)cat(i, "")
>>>     if((i%%1e6)==0)cat('\n')
>>> }
>>>
>>>
>>>       For Rterm 2.15.1 running under Emacs with ESS (Emacs Speaks
>>> Statistics), this prints 10000, then pauses before printing 200000,
>>> etc., until it gets to 1000000, printing 10 numbers in each row.
>>>
>>>
>>>       However, in Rgui 2.15.1, it queues all the numbers and prints
>>> them all together when it completes the computation.  The following is
>>> similar:
>>>
>>>
>>> for(i in 1:1e7){
>>>     tst <- sin(i)
>>>     if((i%%1e5)==0)print(i)
>>>     if((i%%1e6)==0)cat('\n')
>>> }
>>>
>>>
>>>> sessionInfo()
>>>
>>> R version 2.15.1 (2012-06-22)
>>> Platform: i386-pc-mingw32/i386 (32-bit)
>>>
>>> locale:
>>> [1] LC_COLLATE=English_United States.1252
>>> [2] LC_CTYPE=English_United States.1252
>>> [3] LC_MONETARY=English_United States.1252
>>> [4] LC_NUMERIC=C
>>> [5] LC_TIME=English_United States.1252
>>>
>>> attached base packages:
>>> [1] stats     graphics  grDevices utils     datasets  methods base
>>>
>>>
>>>       Thanks,
>>>       Spencer
>>
>>
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



-- 
Jim Holtman
Data Munger Guru

What is the problem that you are trying to solve?
Tell me what you want to do, not how you want to do it.



More information about the R-help mailing list