# [R] replace loops with matrix

Nikhil Kaza nikhil.list at gmail.com
Wed Aug 18 00:57:40 CEST 2010

```what  is nt? is that a typo for ns?
I  don't see why you need to calculate lia within the loop.

Also
library(fBasics)
ccl <-rowprod(lia)

Nikhil Kaza
Asst. Professor,
City and Regional Planning
University of North Carolina

nikhil.list at gmail.com

On Aug 17, 2010, at 6:22 PM, Hey Sky wrote:

> Hey, R users
>
> I am using numerical method for my research paper and the
> computation burden is
> very heavy. first I tried to do it with loops, example code as
> following, and it
> take hours to converge for only 200 obs. and my real data has 4000
> obs. and the
> optimization command that I use is:
>
>
> optim(guess,myfunc1,data=mydata, method="BFGS",hessian=T))
>
> then I tried matrix form computation, it takes only 1/10 of the time
> the loop
> method takes. it may still have room to improve it. at least, the
> following
> part looks ugly.
> ccl[,m]<-lia[,1]*lia[,2]*lia[,3]*lia[,4]*lia[,5]
>
> any suggestion are appreciated.
>
>
> The Loop code:
> for(m in 1:ns){
>  for(i in 1:nt){
>     vbar2[,i]=a[1]+     eta[m]+acedu[,i]*a[2]+acwrk[,i]*a[3]
>     vbar3[,i]=b[1]+b[2]*eta[m]+acedu[,i]*b[3]+acwrk[,i]*b[4]
>
>     v8[,i]=1+exp(vbar2[,i])+exp(vbar3[,i])
>
>       for(j in 1:n){
>           if (edu[j,i]==1) lia[j,i]=1/v8[j,i]
>           if (wrk[j,i]==1) lia[j,i]=exp(vbar2[j,i])/v8[j,i]
>           if (home[j,i]==1) lia[j,i]=exp(vbar3[j,i])/v8[j,i]
>      }
>    ccl[,m]<-lia[,i]*ccl[,m]
>  }
> }
>
> The Matrix code:
> for(m in 1:ns){
>     vbar2[,1:nt]=a[1]+     eta[m]+acedu[,1:nt]*a[2]+acwrk[,1:nt]*a[3]
>     vbar3[,1:nt]=b[1]+b[2]*eta[m]+acedu[,1:nt]*b[3]+acwrk[,1:nt]*b[4]
>
>     v8[,1:nt]=1+exp(vbar2[,1:nt])+exp(vbar3[,1:nt])
>
>     lia[1:n,]<-ifelse(edu[1:n,]==1,1/v8[1:n,],
>                            ifelse(wrk[1:n,]==1,exp(vbar2[1:n,])/
> v8[1:n,],
>
> exp(vbar3[1:n,])/v8[1:n,]))
>
>    ccl[,m]<-lia[,1]*lia[,2]*lia[,3]*lia[,4]*lia[,5]
> }
>
> Nan
> from Montreal
>
>
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help