[R] code speed help? -- example and results provided

Debruicker, Paul Andrew pdebruic at mgmt.purdue.edu
Tue Aug 5 20:28:23 CEST 2003


I have the following piece of code that combines lists comprised of components of varying length into a list with components of constant length.  I have found 2 ways to do it, and the faster of the two is posted below along with sample results.  Do you have any suggestions on how to decrease the calculation time by modifying the code?


> ####Function###########
> replacement2.idx<-function(life=w.life,N=years,n=samples){
+
+ yrs<-rep(N,n)
+ ind<-yrs-life
+
+ x1<-mapply(rep,times=life,x=0)
+ x2<-mapply(rep,times=ind,x=1)
+
+ x3<-data.frame(c(x1[[1]],x2[[1]]))
+
+ for(i in 2:n) x3<-data.frame(x3, append(x1[[i]],x2[[i]]))
+
+ x3<-t(x3)
+ }
>
>
>
> ###Sample Output###
> samples<-5
> years<-10
> w.life<-round(rnorm(samples,5,1),digits=0)
>
> system.time(abc<-replacement2.idx())
[1] 0.04 0.00 0.07 0.00 0.00
>
> abc
                         1 2 3 4 5 6 7 8 9 10
c.x1..1....x2..1...      0 0 0 0 0 0 1 1 1  1
append.x1..i....x2..i... 0 0 0 0 0 0 1 1 1  1
append.x1..i....x2..i... 0 0 0 0 0 0 1 1 1  1
append.x1..i....x2..i... 0 0 0 0 1 1 1 1 1  1
append.x1..i....x2..i... 0 0 0 0 0 1 1 1 1  1
>
>
>
> ###1000 samples####
> samples<-1000
> w.life<-round(rnorm(samples,5,.5),digits=0)
> system.time(method2<-replacement2.idx())
[1] 12.79  0.00 14.04  0.00  0.00
>
>
>
> ###5000 samples####
> samples<-5000
> w.life<-round(rnorm(samples,5,.5),digits=0)
> system.time(method2<-replacement2.idx())
[1] 544.82   0.00 593.98   0.00   0.00
>




More information about the R-help mailing list