-1

我想从 44.400 个基因的宇宙中创建 1000 个包含 1652 个基因的随机列表。我决定更换。我使用以下指令创建随机列表:

randomMatrix<-replicate(1000, sample(gene_list, 1652, replace = T))

关键是在每个列表中都有一个基因被复制。对于我的研究,基因可以在列表之间复制,但不能在每个列表中复制。我怎样才能强制不在每个列表中复制基因?

提前致谢

4

2 回答 2

2

它应该与replace = FALSE

randomMatrix<-replicate(1000, sample(gene_list, 1652, replace = FALSE))

当然,这至少需要 1652 个唯一值gene_list

于 2012-10-05T14:16:47.450 回答
0

一个可重现的例子可以很好地说明你的问题,因为你没有给我们这样的例子我只是假设一个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而不是lapplyreplicate(...)结果输出中会更好。

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
于 2012-10-05T14:15:56.573 回答