Pergunta

I have a matrix A, and I would like to draw samples from each column of A and construct new matrices. For example:

A = matrix(seq(1,9),3,3)

so to get the 1st bootstrap matrix, I would sample with replacement (3 times) from the first column of A, i.e. 1,2,3, sample with replacement (3 times) from the second column of A, i.e. 4,5,6, and sample with replacement (3 times) from the third column of A, i.e. 7,8,9. After that, I re-construct the 1st bootstrap matrix B1 by combining the three bootstrap vectors. I will repeat this procedure for B=199 times, so that bootstrap matrices B1,...,B199 will be available.

My question is, how can I make this program run faster? Which function should I use? I know apply involves essentially for loops so the speed is not guaranteed. How about do.call? Thanks!

Foi útil?

Solução

You can use replicate and apply:

A <- matrix(seq(1,9),3,3)

B <- 199

replicate(B, apply(A, 2, sample, replace = TRUE))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top