2012-04-21 15 views
8

Mi piacerebbe campionare un vettore x di lunghezza 7 con la sostituzione e campionare quel vettore 10 volte separate. Ho provato qualcosa di simile al seguente, ma non riesco a ottenere l'output 7x10 risultante che sto cercando. Questo produce un vettore 1x7, ma non riesco a capire per ottenere gli altri 9 vettoriR: campionare un vettore con sostituzione più volte

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

risposta

20

Questo è un modo molto conveniente per fare questo:

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

Dal momento che sembra voler provare con la sostituzione, si può solo ottenere i * 10 campioni 7 in una sola volta (che è più efficiente per le grandi dimensioni):

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 seconda versione utilizza sample direttamente, ma ci sono alcuni problemi con questo: se x è un numero di lunghezza 1, accadono cose brutte. sample.int è più sicuro.

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

Sembra che tu abbia una risposta adatta, ma ecco un approccio simile al tuo primo tentativo. La differenza è che definiamo samp con le dimensioni appropriate e quindi indicizziamo iterativamente quell'oggetto e lo riempiamo una riga alla volta:

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