[R] Avoiding for loops

Boris Steipe boris.steipe at utoronto.ca
Sun Oct 25 13:14:33 CET 2015


If this code is slow it is not because you are using loops, but because you are dynamically building your vectors and lists and their size needs to change with each iteration causing significant unnecessary computational overhead. If you simply do something like

d <- numeric(m-1)
for (i in 1:m-1) {
 d[i] <- n - sum(x[1:i]) - i
}

for all of your loops, you will see already see very significant speedup. (If you look at my code formatting, and compare it with your own you may also benefit.) The bottom line: the point is not to avoid for-loops, but to speed up your code.

Nb. if you want to avoid loops for some aesthetic reason, read about apply() and its siblings,  and experiment with it. Of course, internally an apply() statement uses loops...

NNb: Do you know how to profile your code? How do you know which part of your code is actually slowing it down?



B.




On Oct 25, 2015, at 6:42 AM, Maram SAlem <marammagdysalem at gmail.com> wrote:

> Hi All,
> 
> I wonder if I can avoid the for() loop in any of the following loops.These
> loops are a part of a larger code which I'm trying to accelerate.
> 
> n=6
> m=4
> x<-c(0,1,1)
> 
> 1st loop
> 
> for (i in 1:m-1)
>  {
>  d[i]<- n- (sum(x[(1):(i)])) - i
>  }
> e<- n*(prod(d))
> 
> 
> 2nd loop
> 
> LD<-list()
>  for (i in 1:(m-1))
>  {
>  LD[[i]]<-seq(0,x[i],1)
>  }
> 
>  LD[[m]]<-seq(0,(n-m-sum(x)),1)
>  LED<-expand.grid (LD)
>  LED<-as.matrix(LED)
> 
> 
> 3rd loop
> 
> for (i in 1:(m-1))
> 
>  {
> 
>   h[i]<- choose(x[i],LED[j,i])
> 
>    }
> 
> 
> 
> 4th loop
> 
> 
> for (i in 1:(m-1))
> 
> {
> 
>   lm[i]<-(sum(LED[j,1:i])) + i
> 
>     }
> 
> 
> I appreciate if anyone has any suggestions or references.
> 
> 
> Thanks in advance.
> 
> 
> Maram Salem
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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