0

我有两个数据框如下:

 seed(1) 
 X <- data.frame(matrix(rnorm(2000), nrow=10))

其中行代表基因,列是基因型。

对于每一轮自举(n=1000),应从该数据集(X)中随机选择基因型而不进行替换,并形成两组数据集(X'应具有5个基因型和Y'应具有5个基因型)。基本上,最终我将拥有数千个这样的数据集X'Y'其中将包含来自完整表达数据集的 5 个随机基因型。

我尝试使用replicateapply没有奏效。

B <- 1000
replicate(B, apply(X, 2, sample, replace = FALSE))
4

1 回答 1

1

我认为首先选择列号可能更有意义,从 200 中选择 10 而无需替换(每个 X' 和 Y' 五个):

colnums_boot <- replicate(1000,sample.int(200,10))

从那里,当你评估每次迭代时,我从 1 到 1000,你可以抓住

Xprime <- X[,colnums_boot[1:5,i]]
Yprime <- X[,colnums_boot[6:10,i]]

这使您免于制作 3 维arraymatrixR 中的泛化)。

此外,如果速度是一个问题,我认为将 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,]]
于 2013-09-20T07:44:51.033 回答