【发布时间】:2012-04-21 23:43:46
【问题描述】:
我想对长度为 7 的向量 x 进行替换采样,并对该向量进行 10 次单独采样。我已经尝试过类似以下的方法,但无法获得我正在寻找的 7x10 输出。这会产生一个 1x7 向量,但我无法计算出其他 9 个向量
x <- runif(7, 0, 1)
for(i in 1:10){
samp <- sample(x, size = length(x), replace = T)
}
【问题讨论】:
标签: 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)
}
【问题讨论】:
标签: r
这是一种非常方便的方法:
replicate(10,sample(x,length(x),replace = TRUE))
【讨论】:
由于您似乎想进行替换采样,因此您可以一次获取 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...
【讨论】:
看起来您得到了合适的答案,但这里的方法与您的第一次尝试类似。不同之处在于我们使用适当的维度定义samp,然后迭代地索引到该对象并一次填充一行:
samp <- matrix(NA, ncol = 7, nrow = 10)
for(i in 1:10){
samp[i,] <- sample(x, size = length(x), replace = T)
}
【讨论】: