我想确定序列中特定感兴趣区域的位置和氨基酸变化,并将该信息存储在表格中。
是否可以通过使用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
答案 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