2013-10-25 62 views
0

所以我试图生成一个频谱,为了做到这一点,我试图将我的数据从列中排序到一个列中,我从列中附加了数据,称为minorallelefreq。出于某种原因,代码不工作,因为我得到所有5箱的值为0。为什么下面的循环会返回0的结果?

下面的代码:

minprop = 0 
minprop1 = 0 
minprop2 = 0 
minprop3 = 0 
minprop4 = 0 

for x in range(1,100): 

    if minorallelefreq[x] <= 0.1: 
     minprop = minprop + 1 
    if minorallelefreq[x] > 0.1 and minorallelefreq[x] <= 0.2: 
     minprop1 = minprop1 + 1 
    if minorallelefreq[x] > 0.2 and minorallelefreq[x] <= 0.3: 
     minprop2 = minprop2 + 1 
    if minorallelefreq[x] > 0.3 and minorallelefreq[x] <= 0.4: 
     minprop3 = minprop3 + 1 
    if minorallelefreq[x] > 0.4 and minorallelefreq[x] <= 0.5: 
     minprop4 = minprop4 + 1 



bin1 = minprop/float(counter) 
bin2 = minprop1/float(counter) 
bin3 = minprop2/float(counter) 
bin4 = minprop3/float(counter) 
bin5 = minprop4/float(counter) 
print "Bin1 (0-0.1)=", bin1, "\t", "Bin2 (0.1-0.2)=", bin2, "\t", "Bin3 (0.2-0.3)=", bin3, "\t", "Bin4 (0.3-0.4)=", bin4, "\t", "Bin5 (0.4-0.5)=", bin5 

所以事实证明,环路不工作的原因是因为蟒蛇并没有读我的价值观(这些都是小数)为小数。所以,我不得不改变它浮动(minorallelefreq [x]),它的工作。

+0

也许“计数器”变量的值是高的? –

+1

minorallelefreq中有什么? – NWard

+0

'计数器'等于什么? minprop ... minprop4的值是什么? – jramirez

回答

2
if minorallelefreq[x] <= int(0.1): 
    minprop = minprop + 1 
if minorallelefreq[x] > 0.1 and minorallelefreq[x] <= 0.2: 
    minprop1 = minprop1 + 1 

意味着将没有采取值> 0且< = 0.1的动作。如果您删除int()电话,会发生什么情况?

而且,什么都不会发生的值> 0.4:

if minorallelefreq[x] > 0.4 and minorallelefreq[x] <= 0.4: # never True 
    minprop4 = minprop4 + 1         # indentation?? 

一般来说,你应该考虑链比较:

if 0.1 < minorallelefreq[x] <= 0.2: # much easier to read, and faster. 
    # etc. 
+0

调整我的代码与您的所有建议,但结果仍然没有改变。 – bioprogrammer

+0

那么,你发布它的代码甚至不会因为缩进错误而运行。如果有更多的错误,我不会感到惊讶。也许混合标签/空格,谁知道。 –

+0

缩进很好。我不确定你指的是哪个缩进错误。 – bioprogrammer

4

有这个代码

    几种可能的错误
  1. int(0.1)=> 0,所以minprop将始终为0,除非存在负值
  2. 没有缩进minprop4,它永远不会被设置,因为该值不能同时为> 0.4且< = 0.4
  3. 您将承担100元,而他们是
  4. 所有0和0.4之间

我建议你尝试根据实际值而不是预期值自动缩减:

import collections 
buckets = collections.Counter() 

for value in minorallfreq: 
    bucket = int(value * 10)/10.0 
    buckets[bucket] += 1 
+0

我已经看过数据,所以我知道所有的值都在0和0.5之间。关于你的第二点,它应该是指“4至5”,所以我解决了这个问题。也是固定点1. – bioprogrammer

+0

您是否尝试过在计数器除以前打印出minprop变量的值?上面的代码是从哪种上下文复制而来的? –

+0

是的,我尝试在划分之前打印出minprop变量,并得到零值。事实上,我也尝试过更改代码,并做出如下决定:如果minorallelefreq [x] == 0.048(.048是数据集中的第一个值),但对于minprop,我仍然得到0的值,所以循环不是'由于某种原因无法正常工作。我不确定你的第二个问题是什么意思。 – bioprogrammer