2012-04-21 8 views
8

Me gustaría muestrear un vector x de longitud 7 con reemplazo y muestrear ese vector 10 veces por separado. He intentado algo como lo siguiente pero no puedo obtener el resultado resultante de 7x10 que estoy buscando. Esto produce un vector 1x7, pero no puedo averiguar para obtener los otros 9 vectoresR: Muestra un vector con reemplazo varias veces

x <- runif(7, 0, 1) 
for(i in 1:10){ 
    samp <- sample(x, size = length(x), replace = T) 
} 

Respuesta

20

Esta es una forma muy conveniente de hacer esto:

replicate(10,sample(x,length(x),replace = TRUE)) 
4

Ya que parece querer probar con reemplazo, sólo puede obtener los 7 * 10 muestras a la vez (que es más eficiente para grandes tamaños):

x <- runif(7) 
n <- 10 
xn <- length(x) 
matrix(x[sample.int(xn, xn*n, replace=TRUE)], nrow=xn) 

# Or slightly shorter: 
matrix(sample(x, length(x)*n, replace=TRUE), ncol=n) 

La segunda versión utiliza sample directamente, pero hay algunas cuestiones con eso: si x es un número de longitud 1, suceden cosas malas. sample.int es más seguro.

x <- c(pi, -pi) 
sample(x, 5, replace=T) # OK 
x <- pi 
sample(x, 5, replace=T) # OOPS, interpreted as 1:3 instead of pi... 
2

Parece que tiene una respuesta adecuada, pero este es un enfoque similar al de su primer intento. La diferencia es que definimos samp con las dimensiones apropiadas, y luego indizamos iterativamente en ese objeto y lo llenamos una fila a la vez:

samp <- matrix(NA, ncol = 7, nrow = 10) 
for(i in 1:10){ 
    samp[i,] <- sample(x, size = length(x), replace = T) 
}