Skip to content
Prev 180294 / 398502 Next

Simulation

Wacek Kusnierczyk wrote:
another approach to create a matrix, a bit more efficient than using 
matrix() but also clean for beginners IMO, is to directly assign 
dimensions to a vector, e.g.,

library(rbenchmark)

n=100; m=100
benchmark(replications=100, columns=c('test', 'elapsed'), order=NULL,
     list={ l=list(); for (i in 1:n) l[[i]] = rnorm(m) },
     liist={ l=vector('list', n); for (i in 1:n) l[[i]] = rnorm(m) },
     matrix=matrix(rnorm(n*m), n, m),
     matrix2 = {mat <- rnorm(n*m); dim(mat) <- c(n, m); mat},
     replicate=replicate(m, rnorm(n))
)

#        test elapsed
# 1      list    0.25
# 2     liist    0.25
# 3    matrix    0.22
# 4   matrix2    0.17
# 5 replicate    0.23

 > n=10; m=1000
...

#        test elapsed
# 1      list    0.17
# 2     liist    0.17
# 3    matrix    0.20
# 4   matrix2    0.15
# 5 replicate    0.75

 > n=1000; m=10
...

#        test elapsed
# 1      list    1.37
# 2     liist    0.92
# 3    matrix    0.21
# 4   matrix2    0.17
# 5 replicate    0.19


Best,
Dimitris