鉴定R中局部比对的氨基酸取代

时间:2018-01-23 13:03:21

标签: r bioinformatics bioconductor

我想确定序列中特定感兴趣区域的位置和氨基酸变化,并将该信息存储在表格中。

是否可以通过使用bioconductor包在R中做这样的事情?我已经设法使用DECIPHER包中的AlignSeqs()对序列进行简单对齐,但我无法自动提取序列中的差异。我从FASTA文件开始。

我想结束这样的事情:

Isolate ID    Reference_AA   Sample_AA   Pos
1             S              T           254
2             T              D           200
3             L              A           230

我有一个长度为74 AA的参考序列,我想查看与参考相比的查询序列(比参考长得多)的差异,并将结果列在表中。位置列与参考序列中的位置相关,而不是与查询序列中的位置相关。我希望参考序列中的第一个AA从68开始,而不是1.

我觉得很难为此添加示例序列,因为它们往往很长,但这里有一些更短的处理(与上表无关):

>ref
VGRALPDVR

>query1
KSSYLDYAMSVIVGTALPDVRDGLKPVHRRVLY

>query2
ELKSSYLDYAMSVIVGRAAPDVRDGLKPV

预期产出:

ID       Reference_AA    Sample_AA   Pos
query1   R               T           70
query2   A               L           72

1 个答案:

答案 0 :(得分:4)

由于您需要参考中的位置,因此您可以使用一系列与参考序列成对的对齐方式。 biostrings包含mismatchTable功能,可为您提供包含所需信息的数据框。使用dplyr进行一些重新格式化:

library(Biostrings)
library(dplyr)

seqs<-readAAStringSet("test.fa")

mismatches <- function(query, ref) {
    pairwiseAlignment(ref, query, substitutionMatrix = "BLOSUM50",
                      gapOpening = 3, gapExtension = 1) %>%
      mismatchTable() %>%
      mutate(ID=names(query), 
             Pos=PatternStart+67, 
             Reference_AA=as.character(PatternSubstring),
             Sample_AA=as.character(SubjectSubstring)) %>% 
             select(ID, Reference_AA, Sample_AA, Pos)
}  

bind_rows(mismatches(seqs[2], seqs[1]), mismatches(seqs[2], seqs[1]))

#>      ID Reference_AA Sample_AA Pos
#>1 query1            R         T  70
#>2 query2            L         A  72

修改

以下是使用lapply循环输入的方法:

bind_rows(lapply(seq_along(seqs[-1]), function(i) mismatches(seqs[i+1], seqs[1])))
#>   ID Reference_AA Sample_AA Pos
#>1 ref            R         T  70
#>2 ref            L         A  72