12

我想对长度为 7 的向量 x 进行替换采样,并对该向量进行 10 次单独采样。我尝试了类似以下的方法,但无法获得我正在寻找的 7x10 输出。这会产生一个 1x7 向量,但我无法计算出其他 9 个向量

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

3 回答 3

30

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

replicate(10,sample(x,length(x),replace = TRUE))
于 2012-04-21T23:46:24.787 回答
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...
于 2012-04-21T23:53:42.100 回答
2

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

samp <- matrix(NA, ncol = 7, nrow = 10)
for(i in 1:10){
  samp[i,] <- sample(x, size = length(x), replace = T)
}
于 2012-04-22T00:01:04.313 回答