我们有两个DNA序列(字符串):
>1
ATGCAT
135198
>2
ATCAT
预期输出:首先,我们需要对齐这两个字符串,然后通过索引获得相关的注解:
ATGCAT
AT-CAT
13-198
第一部分可以使用 * Biosrings * 包完成:
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"
第2部分的当前解决方法:
annot <- unlist(strsplit(s_annot, ""))
annot[ which(c(as.matrix(x)) == "-") ] <- "-"
# [1] "1" "3" "-" "1" "9" "8"
工作正常,但我想知道是否有一种 Biostrings 的方法(或任何其他包),也许通过将注解保留在 metadata 插槽中,然后在对齐后,我们在 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/
- 作者想要 biopython 解决方案,所以如果可能的话,也添加标签post python 解决方案。
3条答案
按热度按时间lp0sw83n1#
可能的解决方案:
其中:
你会得到:
如果你有对应的向量,你可以使用
Map
和dna_fun
-函数:这给出:
数据:
gfttwv5a2#
根据要求,Biopython解决方案:
输出:
g2ieeal73#
答案来自-https://www.biostars.org/p/415896/#9564298
这个问题又出现在我的收件箱里了,所以我想我会带着我想出的解决方案回来。
我相信我最终的解决方案是基于德文郡瑞安的一个想法。
它被嵌入到一个更复杂的代码库中,但总体思路是这样的:
1.正常创建序列的成对比对。
1.迭代比对并创建一种捕获各种序列“移动”的CIGAR字符串。
1.将这组相同的移动应用/Map到对应于每个位置的注解列表,从而重复这组操作
代码:
https://github.com/jrjhealey/ISIS/blob/master/ImmunoRender.py#L35-L103