Creating random binary matrices in R
Reading this post
http://dirk.eddelbuettel.com/blog/2012/09/02/#faster_binomial_matrix_creation
I wondered if a solution in pure R could not be further
improved. It turns out it could; here is my solution (compared
with david
, the best pure-R solution in the blog post):
n <- 500 k <- 100 david <- function(m, n) matrix(sample(0:1, m * n, replace = TRUE), m, n) f <- function(m, n) { tmp <- sample.int(2L, size = m * n, replace = TRUE) - 1L dim(tmp) <- c(m, n) tmp } set.seed(243) example1 <- david(n,k) set.seed(243) example2 <- f(n,k) all.equal(example1, example2)
[1] TRUE
Comparing running times, the new function f
gives a speedup
of about 50%.
system.time(for (i in 1:1000) david(n,k)) system.time(for (i in 1:1000) f(n,k))
user system elapsed 1.100 0.000 1.101 user system elapsed 0.684 0.000 0.684