[R] Speed up R code

AnnaFowler a.fowler09 at imperial.ac.uk
Mon Nov 23 14:01:55 CET 2009


Thanks Stephane, Thats a great help!


SL-16 wrote:
> 
> 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.
>>
> 
> ______________________________________________
> 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.
> 
> 

-- 
View this message in context: http://old.nabble.com/Speed-up-R-code-tp26474898p26477645.html
Sent from the R help mailing list archive at Nabble.com.




More information about the R-help mailing list