如何在 R 中对文本字符串 (utf8) 进行多序列对齐
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 的解决方案,输出 table:
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 package (v2.0.1)
于 2022-05-25 创建
一个解决方案是使用 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 -
给定三个字符串:
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 的解决方案,输出 table:
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 package (v2.0.1)
于 2022-05-25 创建一个解决方案是使用 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 -