Учитывая строку patt
:Строка соответствие с групповыми символами, пытаясь Biostrings пакет
patt = "AGCTTCATGAAGCTGAGTNGGACGCGATGATGCG"
Мы можем сделать коллекцию коротких подстрок str_col
:
str_col = substring(patt,1:(nchar(patt)-9),10:nchar(patt))
, которые мы хотим, чтобы соответствовать против subject1
:
subject1 = "AGCTTCATGAAGCTGAGTGGGACGCGATGATGCGACTAGGGACCTTAGCAGC"
обработка "N" в patt
в качестве шаблона (соответствует любой букве в subject1
), поэтому все подстроки в str_col
соответствуют subject1
.
Я хочу, чтобы это сопоставление строк в большой базе данных строк, и я нашел Bioconductor
пакет Biostrings
быть очень эффективным для этого. Но для того, чтобы быть эффективными, Biostrings требует, чтобы вы конвертировали свою коллекцию подстрок (здесь str_col
) в словарь класса pdict
, используя функцию PDidc()
. Вы можете использовать этот «словарь» позже в таких функциях, как countPDict()
, чтобы подсчитывать совпадения с целью.
Для использования подстановочных знаков вам необходимо разделить словарь на 3 части: голова (слева), доверенная группа (средний) и хвост (справа). У вас могут быть только подстановочные знаки, такие как «N», в голове или хвосте, но не в доверенной группе, и вы не можете иметь доверенный диапазон ширины = 0. Так, например, str_col[15]
не будет соответствовать, если вы используете доверительная полоса с минимальной шириной = 1, как:
> PDict(str_col[1:15],tb.start=5,tb.end=5)
Error in .Call2("ACtree2_build", tb, pp_exclude, base_codes, nodebuf_ptr, :
non base DNA letter found in Trusted Band for pattern 15
потому что «N» находится справа в доверенной группе. Обратите внимание, что строки здесь являются последовательностями ДНК, поэтому «N» - это код для «соответствия A, C, G или T».
> PDict(str_col[1:14],tb.start=5,tb.end=5) #is OK
TB_PDict object of length 14 and width 10 (preprocessing algo="ACtree2"):
- with a head of width 4
- with a Trusted Band of width 1
- with a tail of width 5
Есть ли способ обойти это ограничение Biostrings
? Я также попытался выполнить такую задачу, используя базовые функции R, но я ничего не мог придумать.
Ницца! Огромное спасибо! – vitor
Не уверен, что если вы можете использовать длину (gregexpr()), так как она также вернет 1 для не-матчей. Например. если вы опустите функцию IUPACtoRX, она также вернет 1 для всех. – vitor
@aguiar Правда, я забыл, что gregexpr возвращает -1 в случае несоответствия. Я адаптировал –