繁体   English   中英

如何在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 中的解决方案:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM