我想从 44.400 个基因的宇宙中创建 1000 个包含 1652 个基因的随机列表。我决定更换。我使用以下指令创建随机列表:
randomMatrix<-replicate(1000, sample(gene_list, 1652, replace = T))
关键是在每个列表中都有一个基因被复制。对于我的研究,基因可以在列表之间复制,但不能在每个列表中复制。我怎样才能强制不在每个列表中复制基因?
提前致谢
我想从 44.400 个基因的宇宙中创建 1000 个包含 1652 个基因的随机列表。我决定更换。我使用以下指令创建随机列表:
randomMatrix<-replicate(1000, sample(gene_list, 1652, replace = T))
关键是在每个列表中都有一个基因被复制。对于我的研究,基因可以在列表之间复制,但不能在每个列表中复制。我怎样才能强制不在每个列表中复制基因?
提前致谢
它应该与replace = FALSE
:
randomMatrix<-replicate(1000, sample(gene_list, 1652, replace = FALSE))
当然,这至少需要 1652 个唯一值gene_list
。
一个可重现的例子可以很好地说明你的问题,因为你没有给我们这样的例子我只是假设一个List
并做了一些复制
List <- list(c(2,1,3,4,5,6), c(1,4,5,7,0,6), c(2,4,7,9,3,1))
set.seed(001)
replicate(3, lapply(List, sample, 7, replace=TRUE), simplify = FALSE)
产生
[[1]]
[[1]][[1]]
[1] 1 3 4 6 1 6 6
[[1]][[2]]
[1] 7 7 1 4 4 0 5
[[1]][[3]]
[1] 3 7 3 1 7 3 1
[[2]]
[[2]][[1]]
[1] 1 4 2 1 3 2 3
[[2]][[2]]
[1] 6 5 5 7 5 4 0
[[2]][[3]]
[1] 3 3 2 3 7 3 9
[[3]]
[[3]][[1]]
[1] 5 4 4 5 2 3 5
[[3]][[2]]
[1] 0 5 6 5 4 1 1
[[3]][[3]]
[1] 4 9 9 7 1 4 7
请注意,这种方法将为您原始列表的每个元素提供重新采样的数据(带替换),这就是为什么每个复制都是一个由三个元素组成的列表的原因。
如果你写sapply
而不是lapply
在replicate(...)
结果输出中会更好。
set.seed(001)
replicate(3, sapply(List, sample, 7, replace=TRUE), simplify = FALSE)
[[1]]
[,1] [,2] [,3]
[1,] 1 7 3
[2,] 3 7 7
[3,] 4 1 3
[4,] 6 4 1
[5,] 1 4 7
[6,] 6 0 3
[7,] 6 5 1
[[2]]
[,1] [,2] [,3]
[1,] 1 6 3
[2,] 4 5 3
[3,] 2 5 2
[4,] 1 7 3
[5,] 3 5 7
[6,] 2 4 3
[7,] 3 0 9
[[3]]
[,1] [,2] [,3]
[1,] 5 0 4
[2,] 4 5 9
[3,] 4 6 9
[4,] 5 5 7
[5,] 2 4 1
[6,] 3 1 4
[7,] 5 1 7