如何将R中'msa'包的结果输出到fasta

How to output results of 'msa' package in R to fasta

我正在使用 R package msa, a core Bioconductor 包,用于多序列比对。在 msa 内,我使用 MUSCLE 比对算法来比对蛋白质序列。

library(msa)
myalign <- msa("test.fa", method=c("Muscle"), type="protein",verbose=FALSE)

test.fa文件是一个标准的fasta,如下所示(t运行cated,为简洁起见):

>sp|P31749|AKT1_HUMAN_RAC
MSDVAIVKEGWLHKRGEYIKTWRPRYFLL
>sp|P31799|AKT1_HUMAN_RAC
MSVVAIVKEGWLHKRGEYIKTWRFLL

当我 运行 文件上的代码时,我得到:

 MUSCLE 3.8.31   

Call:
   msa("test.fa", method = c("Muscle"), type = "protein", verbose = FALSE)

MsaAAMultipleAlignment with 2 rows and 480 columns
    aln 
[1] MSDVAIVKEGWLHKRGEYIKTWRPRYFLL
[2] MSVVAIVKEGWLHKRGEYIKTWR---FLL
Con MS?VAIVKEGWLHKRGEYIKTWR???FLL

如您所见,非常合理的对齐方式。

我想将空位比对写入 fasta 文件,最好没有一致序列(例如,Con 行)。所以,我想要:

>sp|P31749|AKT1_HUMAN_RAC
MSDVAIVKEGWLHKRGEYIKTWRPRYFLL
>sp|P31799|AKT1_HUMAN_RAC
MSVVAIVKEGWLHKRGEYIKTWR---FLL

我查看了 msa 帮助,该软件包似乎没有用于写入任何文件类型(fasta 或其他文件)的内置方法。

seqinr package 看起来有点前途,因为也许它可以将此输出读取为 msf 格式,尽管很奇怪。但是,seqinr 似乎需要读入一个文件作为起点。我什至无法使用 write(myalign, ...) 保存它。

我认为您应该首先按照显示特定 read 函数输入的帮助页面中的示例进行操作,然后再使用对齐方式:

mySeqs <- readAAStringSet("test.fa")
myAlignment <- msa(mySeqs)

然后 rownames 函数将传递序列名称:

 rownames(myAlignment)
[1] "sp|P31749|AKT1_HUMAN_RAC" "sp|P31799|AKT1_HUMAN_RAC"

(不是你要求的,但将来可能有用。)然后如果你执行:

detail(myAlignment)   #function actually in Biostrings

.. 你在交互模式下得到一个文本文件,你可以保存它

2 29
sp|P31749|AKT1_HUMAN_RAC   MSDVAIVKEG WLHKRGEYIK TWRPRYFLL
sp|P31799|AKT1_HUMAN_RAC   MSVVAIVKEG WLHKRGEYIK TWR---FLL

如果你想尝试破解一个函数,你可以得到一个用代码编写的文件,然后查看正在使用的 Biostrings detail 函数代码

> showMethods( f= 'detail')
Function: detail (package Biostrings)
x="ANY"
x="MsaAAMultipleAlignment"
    (inherited from: x="MultipleAlignment")
x="MultipleAlignment"

showMethods( f= 'detail', classes='MultipleAlignment', includeDefs=TRUE)
Function: detail (package Biostrings)
x="MultipleAlignment"
function (x, ...) 
{
    .local <- function (x, invertColMask = FALSE, hideMaskedCols = TRUE) 
    {
        FH <- tempfile(pattern = "tmpFile", tmpdir = tempdir())
        .write.MultAlign(x, FH, invertColMask = invertColMask, 
            showRowNames = TRUE, hideMaskedCols = hideMaskedCols)
        file.show(FH)
    }
    .local(x, ...)
}

我写了一个函数:

alignment2Fasta <- function(alignment, filename) {
  sink(filename)

  n <- length(rownames(alignment))
  for(i in seq(1, n)) {
    cat(paste0('>', rownames(alignment)[i]))
    cat('\n')
    the.sequence <- toString(unmasked(alignment)[[i]])
    cat(the.sequence)
    cat('\n')  
  }

  sink(NULL)
}

用法:

mySeqs <- readAAStringSet('test.fa')
myAlignment <- msa(mySeqs)
alignment2Fasta(myAlignment, 'out.fasta')

您可以使用 export.fasta function from bio2mds 库。

# reading of the multiple sequence alignment of human GPCRS in FASTA format: aln <- import.fasta(system.file("msa/human_gpcr.fa", package = "bios2mds")) export.fasta(aln)

您可以先将您的msa对齐(“AAStringSet”)先转换为“对齐”对象,然后导出为fasta,如下所示:

library(msa)

library(bios2mds)

mysequences <-readAAStringSet("test.fa")

alignCW  <- msa(mysequences)

#https://rdrr.io/bioc/msa/man/msaConvert.html

alignCW_as_align <- msaConvert(alignCW, "bios2mds::align")

export.fasta(alignCW_as_align, outfile = "test_alignment.fa", ncol = 60, open = "w")