多次随机化矩阵
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
随机化为 A1
,A2
, ... A10
然后我可以在需要时保存这些检索 A1
,...A10
。我知道我可以通过使用 A1 <- A[,sample(ncol(A))]
随机化 A
行来给我 A1
,这可能如下所示:
[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 在评论中提到的,我们可以使用 apply
和 MARGIN=1
来按行进行 sample
ing。我们可以将输出的列名更改为原始矩阵的列名 ('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")))
我有一个数据,一些由矩阵表示的高通量基因数据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
随机化为 A1
,A2
, ... A10
然后我可以在需要时保存这些检索 A1
,...A10
。我知道我可以通过使用 A1 <- A[,sample(ncol(A))]
随机化 A
行来给我 A1
,这可能如下所示:
[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 在评论中提到的,我们可以使用 apply
和 MARGIN=1
来按行进行 sample
ing。我们可以将输出的列名更改为原始矩阵的列名 ('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")))