繁体   English   中英

多次随机化矩阵

[英]Randomizing a matrix multiple times

我有一个数据,其中一些数据以矩阵A表示

          C1 C2 C3 C4
 Gene A   3  5  7  4
 Gene B   2  4  9  3
 Gene C   1  6  8  5

我希望连续随机化该矩阵(例如10次),并将每个新的随机矩阵另存为R中的新对象。因此,我将A随机化为A1A2 ...... A10 ,然后可以保存这些在我需要时检索A1 ,... A10 我知道我可以通过使用A1 <- A[,sample(ncol(A))]给我A1来随机化A行,它可能如下所示:

         [1] [2] [3] [4] 
Gene A    5   3   4   7  
Gene B    9   4   3   2
Gene C    5   8   6   1

是否可以自动生成A的更多按行排列,而不是一次又一次手动输入该行代码? 谢谢!

我们可以使用replicate来随机化matrix “ n”次。 我们指定simplify=FALSE以获得list输出。

n <- 10
lst <- replicate(n, A[,sample(ncol(A))], simplify=FALSE)
names(lst) <- paste0('A', seq(n))
lst$A1
#       C1 C2 C4 C3
#Gene A  3  5  4  7
#Gene B  2  4  3  9
#Gene C  1  6  5  8

如果我们是按行独立采样,如注释中提到的@Frank,则可以使用applyMARGIN=1进行逐行sample 我们可以将输出的列名更改为原始矩阵的列名('A')。

lst <- replicate(n, t(apply(A,1,sample)) , simplify=FALSE)
names(lst) <- paste0('A', seq(n))
lst <- lapply(lst, function(x) {colnames(x) <- colnames(A); x})
lst$A1
#       C1 C2 C3 C4
#Gene A  7  4  3  5
#Gene B  2  4  9  3
#Gene C  5  8  1  6

数据

A <- structure(c(3L, 2L, 1L, 5L, 4L, 6L, 7L, 9L, 8L, 4L, 3L, 5L), 
.Dim = 3:4, .Dimnames = list(
c("Gene A", "Gene B", "Gene C"), c("C1", "C2", "C3", "C4")))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM