Словарь и функция отображения генного выхода не возвращают ожидаемые частоты - PullRequest
1 голос
/ 01 февраля 2020

Я часами пытался выяснить, что не так с этим кодом биоинформатики, и я не вижу его. части моей функции, кажется, работают, но это не видит определенные образцы. Я использую функцию скользящего окна, чтобы возвратить количество раз, когда определенная комбинация пар оснований длины k отображается в фрагменте текста.

первая функция, которая мне нужна, по существу, создает индекс четвертичный номер нуклеотидной строки:

nucs = {'A':0,'C':1,'G':2,'T':3}
def PatternToNumber(Pattern):
    index = 0
    power = []
    for i in range(len(Pattern)-1,-1,-1):
        power.append(i)
    for i in range(len(Pattern)):
        index += nucs[Pattern[i]]*(4**power[i])
    return index

и следующая функция, которую я использую, выполняет итерацию по фрагменту текста и добавляет 1 к индексу в массиве частот.

def ComputingFrequencies(Text,k):
    FrequencyArray = [0]*(4**k)
    for i in range(len(Text)-k):
        Pattern = Text[i:i+k]
        index = PatternToNumber(Pattern)
        FrequencyArray[index] += 1
    print(*FrequencyArray)

Как и я Я сказал, что я посмотрел каждую строку, и, кажется, он отлично работает, переводя паттерны нуклеотидов в индексные числа так, как я ожидал, но вывод, который вы запускаете:

ComputeFrequencies('ACGCGGCTCTGAAA',2)

:

1 1 0 0 0 0 2 2 1 2 1 0 0 1 1 0

если вы посмотрите на первое число в FrequencyArray, это скажет нам, что строка «AA» показывает только 1, но последние три символа в текстовом вводе - «AAA», что будет означать «AA 'появляется дважды, и первая запись в FrequencyArray должна быть 2, а не 1. То, что мы должны ожидать, это:

2 1 0 0 0 0 2 2 1 2 1 0 0 1 1 0

Если я не объяснил это хорошо, я могу попытаться уточнить мой немного кодировать, если нужно д.

1 Ответ

1 голос
/ 01 февраля 2020

Я уверен, что у вас просто ошибка выключения на 1. Поскольку вы просто не проверяете последний символ?

for i in range(len(Text)-k):

Для длины 2 он будет повторяться только до первого AA, поэтому вы видите его только один раз. Измените на

for i in range(len(Text)-(k-1)):

И я думаю, что это должно дать вам то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...