[R] any alternatives for complex for-loops?

Kinoko andzsinszan at gmail.com
Wed Nov 12 09:32:21 CET 2008


Dear Erik,

Thank you very much.
Probably it is exactly "zoo" what I have beenlooking for.
Actually "rollapply" looks like something I could use, but...

For some reasons beyond me, the following attempts
in which I tried to apply my home-made 'fun' to rollaply
miserable failed.

complexFn <- function(a,b){
  c <- (a+b)/2
  return(c)

}
x <- zoo(1:10)

# OK with built in function
rollapply(x,width=2,mean)
# ALL WRONG
rollapply(x,width=2, complexFn)
rollapply(x,width=2, "complexFn")
rollapply(x,width=2, FUN=complexFn)
rollapply(x,width=2, FUN<-function(a,b){(a+b)/2} )
# ALMOST GOOD (=WRONG)
rollapply(x,width=2, FUN<-function(a,b) complexFn)


However when I rewrote my fn to have only one argument, rollapply
works fine.

complexFn <- function(ab){
  a <- ab[1]
  b <- ab[2]
  c <- (a+b)/2
  return(c)
}
x <- zoo(1:10)
rollapply(x,width=2, complexFn)


Now, it would be nice to figure out how to use rollapply with my
original two-argument function.
(surely I dont want to rewrite all of my references to complexFn... ).

R being an OO language I would have a look at overloading
(well... for the first glance overloading is not as straightforward as
in Java or C++).

Of course the easiest thing would be to make rollaply work with my two-
argument function.
I am sure it is pretty easy... for people who already know it...



More information about the R-help mailing list