[R] any alternatives for complex for-loops?

Erik Iverson iverson at biostat.wisc.edu
Wed Nov 12 06:59:09 CET 2008


Hello,

Well, in this case, you're simply applying a rolling mean with window of 
2.  Package 'zoo' has the rollmean function that does exactly this sort 
of thing

install.packages("zoo")
library(zoo)
x <- 1:10
rollmean(x, 2)

Then, check out the source for rollmean by simply typing

rollmean.default

at the R prompt.  See how they did it. I realize not a direct answer to 
your question, but hopefully gets you started.  You'll have to think 
about it on a case by case basis in general.

HTH,
Erik

Kinoko wrote:
> Thanks for the replies
> 
> Sorry for being unclear.
> 
> I am asking if there is a way to process a vector in a way
> that uses references to other elements of the same vector.
> And doing this without a for-loop.
> 
> Here is a running code:
> 
> <code>
  complexFn <- function(a,b){
    c <- (a+b)/2
    return(c)
  }

  x <- 1:10
  y <- rep(NA, length(x))

  for (i in 1:length(x)){
      if(i>1){
          y[i] = complexFn(x[i-1], x[i])
      }
  }
  print(y)


</code>
> 
> And here is another attempt without the for-loop.
> 
> <code>
> x <- 1:10
> x1 <- c(NA, x)
> length(x1)<-length(x)
> 
> y<-mapply(complexFn,x,x1)
> print(c(y))
> </code>
> 
> If someone could tell me the normal/elegant/effective/R way of
> doing this kind of vector processing, that would highly appreciated.
> 
> best,
> 
> gabor
> 
> ______________________________________________
> 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.



More information about the R-help mailing list