2012-10-06 38 views
-5

可能重复:
Random sampling a list of genes如何生成唯一的随机列表

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

例:宇宙=字母[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 

由于宇宙是没有这么大,我不能集替换= f。如果我设置REPLACE = T,出现在列表中复制的元素......这就是我试图避免我的分析。

在此先感谢

E.

+0

我认为''19000'',''**'不是**是小数点? –

+0

[random.sample(http://docs.python.org/library/random.html#random.sample)应该做的伎俩。 –

+5

问[相同的问题(http://stackoverflow.com/questions/12754724/random-sampling-a-list-of-genes)你不显示你在临时做了什么以前那样是不会激励他人来帮你! – A5C1D2H2I1M1N2O1R2T1

回答

4

这段代码从宇宙中抽取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" 
+0

嗨保罗!谢谢你,但是如果我设置更换= F,因为我尝试过一下,我将永远无法从19.000基因开始产生1652个基因名单.... – Elb

+0

我从你的问题引用:'唯一的条件是,名单可以包含它们之间的类似基因(由于替换),但是每个列表不能包含多于一次的基因。此代码满足此要求。 –

+0

@Elb,也许你正在解决问题。在列表中不应该有替换,但是您可以从每个新列表的整个Universe重新开始。 –

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)] 

需要不到一第二运行。如果你想避免重复(不太可能在第一个地方),你可以使用一套

>>> result = set() 
>>> while len(result) < 1000: 
...  result.add(tuple(random.sample(universe, 1652))) 
+0

'“REPLACE = T”'是R中样本函数的一个参数,尽管它们应该是小写的。 'replace = TRUE'表示用替换画图,'FALSE'表示画图不用替换。 'random.sample'在没有替换的情况下绘制。 –