[R] Speed up R code

SL sl465 at yahoo.fr
Mon Nov 23 13:03:27 CET 2009


Loops tend to dramatically increase computation time. You may re-write
a vectorized version of your code if possible, i.e. use matrix
algebra. Calculus is a lot faster if one can avoid loops (at least
some of them) .

Best,
Stephane

2009/11/23 AnnaFowler <a.fowler09 at imperial.ac.uk>:
>
> Hi, Im new to R and having some trouble with my code - it works, its just
> very slow! Ive tried lots of things, but nothing quite seems to work, so any
> help and suggestions would be really appreciated!
>
> I want to calculate the marginal likelihood for every element of a row of a
> matrix and the corresponding element in every other row. Then sum these for
> each row, so I get an upper triangular matrix which consists of the sum of
> the marginal likelihoods for row i and row j.
>
>
> X<-read.table()
> X1<-as.matrix(X)
>
> mlr<-function(X1,p,q,Vinv=1){
> X2<-X1^2
>  P<-length(p)
>  Q<-length(q)
>
>  Res<-matrix(ncol=P,nrow=P)
>
>  for(i in 1:(P-1)){
>
>      lpi<-p[i]
>        Y1<-matrix(nrow=(P-i),ncol=Q)
>        Y2<-matrix(nrow=(P-i),ncol=Q)
>        tB<-matrix(nrow=(P-i),ncol=Q)
>
>         for(j in (i+1):P){
>         lpj<-p[j]
>         for(k in 1:Q){
>            Y1[j-i,k]<-sum(X1[c(i,j),k])
>            Y2[j-i,k]<-sum(X2[c(i,j),k])
>
>            }
>           tB[j-i,]<-(lpi+lpj)*q
>          }
>
>        V1<- (Vinv + tB)^(-1)
>        c<-tB/2
>        a1<-1 + c
>        b1<-1 + (Y2 - V1*(Y1^2))/2
>       z<-log(V1)/2 + lgamma(a1) - c*log.pi - a1*log(b1)
>       Res[i,]<-c(rep(NA,i),apply(z,1,sum))
>  }
>  return(Res)
> }
>
>
> Its fine for a matrix of 100x100, but the data Im working with is 3538x116,
> and so this can take hours!
>
> Any help would be really appreciated!
> Thanks,
> Anna
> --
> View this message in context: http://old.nabble.com/Speed-up-R-code-tp26474898p26474898.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> 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