(я пытался спросить об этом на BioStars , но из-за небольшого шанса, что кто-то из интеллектуального анализа текста посчитает, что есть лучшее решение, я также публикую это здесь)
Задача, которую я пытаюсь выполнить, - выровнять несколько последовательностей.
У меня нет базового шаблона для сопоставления. Все, что я знаю, это то, что «Истинный» паттерн должен иметь длину «30» и что последовательности, в которых у меня были пропущенные значения, вводились в них в случайных точках.
Вот пример таких последовательностей: слева мы видим реальное местоположение пропущенных значений, а справа мы видим последовательность, которую мы сможем наблюдать.
Моя цель состоит в том, чтобы восстановить левый столбец, используя только те последовательности, которые были у меня в правом столбце (основываясь на том факте, что многие буквы в каждой позиции одинаковы)
Real_sequence The_sequence_we_see
1 CGCAATACTAAC-AGCTGACTTACGCACCG CGCAATACTAACAGCTGACTTACGCACCG
2 CGCAATACTAGC-AGGTGACTTCC-CT-CG CGCAATACTAGCAGGTGACTTCCCTCG
3 CGCAATGATCAC--GGTGGCTCCCGGTGCG CGCAATGATCACGGTGGCTCCCGGTGCG
4 CGCAATACTAACCA-CTAACT--CGCTGCG CGCAATACTAACCACTAACTCGCTGCG
5 CGCACGGGTAAGAACGTGA-TTACGCTCAG CGCACGGGTAAGAACGTGATTACGCTCAG
6 CGCTATACTAACAA-GTG-CTTAGGC-CTG CGCTATACTAACAAGTGCTTAGGCCTG
7 CCCA-C-CTAA-ACGGTGACTTACGCTCCG CCCACCTAAACGGTGACTTACGCTCCG
Вот пример кода для воспроизведения приведенного выше примера:
ATCG <- c("A","T","C","G")
set.seed(40)
original.seq <- sample(ATCG, 30, T)
seqS <- matrix(original.seq,200,30, T)
change.letters <- function(x, number.of.changes = 15, letters.to.change.with = ATCG)
{
number.of.changes <- sample(seq_len(number.of.changes), 1)
new.letters <- sample(letters.to.change.with , number.of.changes, T)
where.to.change.the.letters <- sample(seq_along(x) , number.of.changes, F)
x[where.to.change.the.letters] <- new.letters
return(x)
}
change.letters(original.seq)
insert.missing.values <- function(x) change.letters(x, 3, "-")
insert.missing.values(original.seq)
seqS2 <- t(apply(seqS, 1, change.letters))
seqS3 <- t(apply(seqS2, 1, insert.missing.values))
seqS4 <- apply(seqS3,1, function(x) {paste(x, collapse = "")})
require(stringr)
# library(help=stringr)
all.seqS <- str_replace(seqS4,"-" , "")
# how do we allign this?
data.frame(Real_sequence = seqS4, The_sequence_we_see = all.seqS)
Я понимаю, что если бы у меня была только строка и шаблон, я мог бы использовать
library(Biostrings)
pairwiseAlignment(...)
Но в случае, который я представляю, мы имеем дело со многими последовательностями для выравнивания друг с другом (вместо выравнивания их по одному шаблону).
Есть ли известный способ сделать это в R?