随机列表与替换

时间:2012-10-05 13:58:16

标签: r

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

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

关键是每个列表中都复制了一个基因。对于我的研究,基因可以在列表之间复制,但不能在每个列表中复制。我如何强制不在每个单一列表中复制基因?

提前致谢

2 个答案:

答案 0 :(得分:2)

它应该与replace = FALSE

一起使用
randomMatrix<-replicate(1000, sample(gene_list, 1652, replace = FALSE))

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

答案 1 :(得分:0)

reproducible example很好地说明你的问题,因为你没有给我们这样的例子我只假设一个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