[R] Speed up R code
AnnaFowler
a.fowler09 at imperial.ac.uk
Mon Nov 23 10:30:38 CET 2009
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.
More information about the R-help
mailing list