[R] performance: zoo's rollapply() vs inline

Ken-JP kfmfe04 at gmail.com
Mon Mar 23 09:49:41 CET 2009


zoo's rollapply() function appears to be extremely useful for plugging in a
function on-the-fly to run over a window.  With inline, there is a lot more
coding and room for error, and the code is less portable because the user
has to have R compiling set up or it won't work.

However, rollapply() seems to be really slow.  Several orders of magnitude
slower than inline, in fact.  I don't know how to call R functions from C
inline yet, but it looks like I need to learn, because the speed difference
is just way too big.

The results of a quick test are shown below.  

I am totally open to suggestions on how to do windowed calculations, in
general, but it looks like I may have to bite the bullet and learn all the
intricacies of calling R from C.

NOTE:  pchg.inline() is not shown because it's much longer/complex than
pchg.rollapply(), but I am doing no optimizations.

------------------------------------------------------------------------------------------------------------

pchg.rollapply <-   function(this, m, shift=1, ...)  {
  rollapply( m, shift+1, function(x) { x[shift+1]/x[1] - 1; }, align="right"
);
}

> dim( m )
[1] 4518  800
> system.time( x.rollapply <- pchg.rollapply( m, 20 ) )
   user  system elapsed 
 146.94    0.81  157.03 
> system.time( x.inline    <- pchg.inline( m, 20 ) )
   user  system elapsed 
   0.69    0.00    0.72 



-- 
View this message in context: http://www.nabble.com/performance%3A--zoo%27s-rollapply%28%29-vs-inline-tp22656214p22656214.html
Sent from the R help mailing list archive at Nabble.com.




More information about the R-help mailing list