[英]How to do multiple sequence alignment of text strings (utf8) in R
給定三個字符串:
seq <- c("abcd", "bcde", "cdef", "af", "cdghi")
我想做多序列比對,以便得到以下結果:
abcd
bcde
cdef
a f
cd ghi
使用我嘗試過的 msa 包中的 msa() 函數:
msa(seq, type = "protein", order = "input", method = "Muscle")
並得到以下結果:
aln names
[1] ABCD--- Seq1
[2] -BCDE-- Seq2
[3] --CD-EF Seq3
[4] -----AF Seq4
[5] --CDGHI Seq5
Con --CD-?? Consensus
我想將此函數用於可以包含任何 unicode 字符的序列,但在此示例中,該函數已經給出警告:找到無效字母。 有任何想法嗎?
這是輸出表格的基本 R 中的解決方案:
seq <- c("abcd", "bcde", "cdef", "af", "cdghi")
all_chars <- unique(unlist(strsplit(seq, "")))
tab <- t(apply(do.call(rbind, lapply(strsplit(seq, ""),
function(x) table(factor(x, all_chars)))), 1,
function(x) ifelse(x == 1, all_chars, " ")))
我們可以打印不帶引號的輸出以更清楚地看到它:
print(tab, quote = FALSE)
#> a b c d e f g h i
#> [1,] a b c d
#> [2,] b c d e
#> [3,] c d e f
#> [4,] a f
#> [5,] c d g h i
由reprex 包於 2022-05-25 創建 (v2.0.1)
一個解決方案是使用 LingPy。 首先按照http://lingpy.org/tutorial/installation.html的說明安裝 LingPy。 然后運行:
library(reticulate)
builtins <- import_builtins()
lingpy <- import("lingpy")
seqs <- c("mɪlk","mɔˑlkə","mɛˑlək","mɪlɪx","mɑˑlʲk")
multi <- lingpy$Multiple(seqs)
multi$prog_align()
builtins$print(multi)
輸出:
m ɪ l - k -
m ɔˑ l - k ə
m ɛˑ l ə k -
m ɪ l ɪ x -
m ɑˑ lʲ - k -
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.