R:对具有多次替换的载体进行取样

时间:2012-04-21 23:43:46

标签: r

我想用长度为7的矢量x进行采样,然后对该矢量进行10次单独的采样。我尝试了类似下面的东西,但无法得到我想要的结果7x10输出。这会产生一个1x7的矢量,但我无法弄清楚得到其他9个矢量

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

3 个答案:

答案 0 :(得分:28)

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

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

答案 1 :(得分:4)

由于您似乎想要更换样品,您可以一次获得7 * 10样品(对于大尺寸样品更有效):

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)

第二个版本直接使用sample,但是存在一些问题:如果x是长度为1的数字,则会发生错误。 sample.int更安全。

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 :(得分:2)

看起来你有一个合适的答案,但这里的方法类似于你的第一次尝试。不同之处在于我们使用适当的维度定义samp,然后迭代地索引到该对象并一次填充一行:

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