給定兩個長度相等的序列(例如 DNA 序列),我希望能夠找到它們之間的突變——序列中的型別和索引。例如,如果我輸入序列AGGCTAC和AGCCTTC,我想得到一個像G3C, A6T.
我可以很好地得到差異的數量:
seqs <- Biostrings::readAAStringSet("PSE-1_Round20.fas")
nmut <- adist(seqs[1], seqs)
但是我想不出比回圈更優雅的獲取位置的方法,這看起來很笨拙——我想以此為契機來學習。
我正在使用BiostringsR 中的包,但該包中似乎沒有任何特殊工具可用于我想做的任何事情,我認為任何適用于通用字串的解決方案也適用于我。事實上,如果在 python 或 bash 腳本中有更優雅的解決方案,我也會接受。
uj5u.com熱心網友回復:
似乎有多個包應該這樣做。一是包中的findMutations功能adegenet。
至于字串比較問題,請看這個問題。如果字串長度相同,這是一個可以作業的函式:
mutations <- function(str1, str2) {
str1vec <- unlist(strsplit(str1, ""))
str2vec <- unlist(strsplit(str2, ""))
iMut <- (1:length(str1vec))[str1vec != str2vec]
return(paste0(str1vec[iMut], iMut, str2vec[iMut]))
}
> mutations("AGGCTAC", "AGCCTTC")
[1] "G3C" "A6T"
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/328194.html
上一篇:使用來自另一個串列的部分字串匹配的列名的R子集data.frame
下一篇:矢量化以提取和系結非常嵌套的資料
