简体   繁体   中英

R: Sample a vector with replacement multiple times

I'd like to sample a vector x of length 7 with replacement and sample that vector 10 separate times. I've tried the something like the following but can't get the resulting 7x10 output I'm looking for. This produces a 1x7 vector but I can't figure out to get the other 9 vectors

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

这是一种非常方便的方法:

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

Since you seem to want to sample with replacement, you can just get the 7*10 samples at once (which is more efficient for large sizes):

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)

The second version uses sample directly, but there are some issues with that: if x is a numeric of length 1, bad things happen. sample.int is safer.

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...

Looks like you got a suitable answer, but here's an approach that's similar to your first attempt. The difference is that we define samp with the appropriate dimensions, and then iteratively index into that object and fill it one row at a time:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM