-4

可能重复:
随机抽样基因列表

我想从 19.000 个基因的宇宙中创建 1000 个包含 1652 个基因的随机列表。我决定更换,因为宇宙没有那么大。唯一的条件是列表之间可以包含相似的基因(由于替换),但每个列表不能包含超过一次的基因。因此它将在单个列表中是唯一的。对此有何建议?

例如:宇宙 = 字母[1:26]

期望的输出:

 [[1]]  [[2]]   [[3]]   [[...]]
   a      b       f
   b      c       a
   c      d       b
   f      z       j
   h      j       o

我想避免这样的情况:

 [[1]]  [[...]]
  a   
  a   
  b   
  c
  c

由于宇宙不是那么大,我不能设置 REPLACE = F。如果我设置 REPLACE = T,重复的元素会出现在列表中……这是我在分析中试图避免的。

提前致谢

E.

4

2 回答 2

4

此代码从宇宙中抽取 10 个样本中的 5 个样本,无需替换。我认为这就是你想要的:

Universe = letters[1:26]
replicate(5, sample(Universe, 10, replace = FALSE))

     [,1] [,2] [,3] [,4] [,5]
 [1,] "j"  "l"  "k"  "c"  "j" 
 [2,] "g"  "i"  "c"  "t"  "g" 
 [3,] "z"  "u"  "m"  "u"  "e" 
 [4,] "a"  "b"  "t"  "e"  "q" 
 [5,] "q"  "d"  "j"  "k"  "m" 
 [6,] "r"  "a"  "l"  "l"  "x" 
 [7,] "e"  "g"  "r"  "i"  "f" 
 [8,] "l"  "w"  "o"  "g"  "u" 
 [9,] "b"  "y"  "b"  "x"  "c" 
[10,] "u"  "j"  "x"  "a"  "b" 
于 2012-10-06T11:29:01.923 回答
3

不确定“REPLACE = T”是什么意思,但 random.sample 可能会做你想做的事

>>> import random
>>> import string
>>> universe = string.ascii_lowercase
>>> random.sample(universe, 5)
['z', 'n', 'p', 'u', 's']

用数字作为宇宙

>>> universe = range(19000)
>>> result = [random.sample(universe, 1652) for x in range(1000)]

运行时间不到一秒钟。如果您想避免重复(一开始不太可能),您可以使用 set

>>> result = set()
>>> while len(result) < 1000:
...     result.add(tuple(random.sample(universe, 1652)))
于 2012-10-06T11:27:50.820 回答