2012-04-21 23 views
8

我想抽样一个向量x,长度为7,替换和样本向量分开10次。我试过类似以下的东西,但无法得到我期待的7x10输出结果。这将产生一个1X7向量,但我想不出来得到其他9个载体R:多次替换一个向量的样本

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

回答

20

这是做这是一个非常方便的方法:

replicate(10,sample(x,length(x),replace = TRUE)) 
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

看起来你有一个合适的答案,但这里的方法与你的第一次尝试类似。区别在于我们定义了具有适当尺寸的samp,然后迭代索引到该对象并一次填充一行:

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