我想用长度为7的矢量x进行采样,然后对该矢量进行10次单独的采样。我尝试了类似下面的东西,但无法得到我想要的结果7x10输出。这会产生一个1x7的矢量,但我无法弄清楚得到其他9个矢量
x <- runif(7, 0, 1)
for(i in 1:10){
samp <- sample(x, size = length(x), replace = T)
}
答案 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)
}