我有两个数据格式如下:
seed(1)
X <- data.frame(matrix(rnorm(2000), nrow=10))
其中行代表基因,列代表基因型。
对于每一轮的引导(n=1000
),应随机选择基因型而不替换此数据集(X
),并形成两组数据集(X'
应有5种基因型,Y'
应有5种基因型)。基本上,最后我将拥有1000个这样的数据集-- X'
和Y'
,它们将包含来自完整表达式数据集的5个随机基因型。
我试过使用replicate
和apply
,但没有起作用。
B <- 1000
replicate(B, apply(X, 2, sample, replace = FALSE))
发布于 2013-09-20 07:44:51
我认为,您最好先选择列号,从200中选择10,而不替换(每X‘和Y’5):
colnums_boot <- replicate(1000,sample.int(200,10))
从那里开始,当您计算每个迭代时,我从1到1000,您可以抓取
Xprime <- X[,colnums_boot[1:5,i]]
Yprime <- X[,colnums_boot[6:10,i]]
这就避免了制作三维array
( matrix
在R中的推广).
此外,如果速度是一个考虑,我认为它会更快离开X作为一个矩阵,而不是一个数据框架。也许其他人可以对此发表评论。
编辑:下面是一种预先抓取它们的方法(在一对三维数组中):
Z <- as.matrix(X)
Xprimes <- array(,dim=c(10,5,1000))
Xprimes[] <- Z[,colnums_boot[1:5,]]
Yprimes <- array(,dim=c(10,5,1000))
Yprimes[] <- Z[,colnums_boot[6:10,]]
https://stackoverflow.com/questions/18911185
复制相似问题