[R] code speed help,
Paul DeBruicker
paul at woodgasllc.com
Tue Aug 5 20:26:49 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