[R] Avoiding loops to spare time and memory
Prof Brian Ripley
ripley at stats.ox.ac.uk
Thu May 8 11:22:58 CEST 2003
Have you profiled your code (see `Writing R Extensions')?
My guess is that most of the time is being spent in eigen(); if so you
would have to use a different approach to gain much speed.
BTW, please make more use of the space bar: your code is nigh unreadable
(and so I've not tried to read it in detail). `Writing R Extensions'
also shows you how to format code well.
On Thu, 8 May 2003, Dirk Enzmann wrote:
> Is it possible to avoid the loop in the following function (or make the
> function otherwise more efficient) and can someone point me to a
> possible solution? (It would be great if hours could be reduced to
> seconds :-).
>
> # ---------------------------------------------
> RanEigen=function(items=x,cases=y,sample=z)
> {
> X=matrix(rnorm(cases*items),nrow=cases,byrow=F)
> S=crossprod(X-rep(1,cases) %*% t(colMeans(X)))
>
> EV=eigen((1/sqrt(diag(S))*diag(items))%*%S%*%(1/sqrt(diag(S))*diag(items)),only.values=T)$values
>
> for (i in 2:sample)
> {
> X=matrix(rnorm(cases*items),nrow=cases,byrow=F)
> S=crossprod(X-rep(1,cases) %*% t(colMeans(X)))
>
> EV=rbind(EV,eigen((1/sqrt(diag(S))*diag(items))%*%S%*%(1/sqrt(diag(S))*diag(items)),only.values=T)$values)
>
> }
> REigV=(cbind(1:items,colMeans(EV)))
> REigV[,2]=as.numeric(formatC(REigV[,2],format="f",digits=7,flag="
> ",width=10))
> colnames(REigV)=c(' ','Eigenvalue')
> rownames(REigV)=rep('',items)
> return(REigV)
> }
> # ---------------------------------------------
--
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
More information about the R-help
mailing list