У нас есть 2 последовательности ДНК (строки):
>1
ATGCAT
135198
>2
ATCAT
Ожидаемый результат: сначала нам нужно выровнять эти 2 строки, затем получить соответствующую аннотацию по индексу:
ATGCAT
AT-CAT
13-198
Первая часть может быть выполнена с использованием пакета Biostrings :
library(Biostrings)
p <- DNAString("ATCAT")
s <- DNAString("ATGCAT")
s_annot <- "135198"
x <- pairwiseAlignment(pattern = p, subject = s)
aligned(x)
# A DNAStringSet instance of length 1
# width seq
# [1] 6 AT-CAT
as.character(x)
# [1] "AT-CAT"
as.matrix(x)
# [,1] [,2] [,3] [,4] [,5] [,6]
# [1,] "A" "T" "-" "C" "A" "T"
Текущее решение для второй части:
annot <- unlist(strsplit(s_annot, ""))
annot[ which(c(as.matrix(x)) == "-") ] <- "-"
# [1] "1" "3" "-" "1" "9" "8"
Работает нормально, но мне было интересно, есть ли Biostrings способ сделать это (или любые другие пакеты), возможно, сохранив аннотацию в слоте metadata , затем после выравнивания мы получим соответствующую аннотацию для соответствующих баз в метаданные , что-то вроде ниже:
getSlots("DNAString")
# shared offset length elementMetadata metadata
# "SharedRaw" "integer" "integer" "DataTable_OR_NULL" "list"
# just an idea, non-working code
s@metadata <- unlist(strsplit(s_annot , ""))
x <- pairwiseAlignment(pattern = p, subject = s)
metadata(x)
# [[1]]
# [1] "1" "3" "-" "1" "9" "8"
Примечание:
- С разрешения автора украдено у BioStars - https://www.biostars.org/p/415896/
- Автор хотел био python решение, поэтому добавив тег, опубликуйте python решение, если возможно, тоже .