Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中执行基本的多序列比对?_R_Alignment_Sequence_Bioinformatics_Text Alignment - Fatal编程技术网

如何在R中执行基本的多序列比对?

如何在R中执行基本的多序列比对?,r,alignment,sequence,bioinformatics,text-alignment,R,Alignment,Sequence,Bioinformatics,Text Alignment,(我试着问这个问题,但是文本挖掘的人可能会认为有更好的解决方案,我也在这里转载这个问题) 我试图实现的任务是对齐多个序列 我没有一个基本的模式来匹配。我所知道的只是“真实”模式的长度应该是“30”,并且我已经在随机点向它们引入了缺失值的序列 这里是这样一个序列的例子,在左边我们看到缺失值的真实位置,在右边我们看到我们能够观察到的序列 我的目标是仅使用右列上的序列重建左列(基于每个位置的许多字母都相同的事实) 下面是重现上述示例的示例代码: ATCG <- c("A","T","C","G"

(我试着问这个问题,但是文本挖掘的人可能会认为有更好的解决方案,我也在这里转载这个问题)

我试图实现的任务是对齐多个序列

我没有一个基本的模式来匹配。我所知道的只是“真实”模式的长度应该是“30”,并且我已经在随机点向它们引入了缺失值的序列

这里是这样一个序列的例子,在左边我们看到缺失值的真实位置,在右边我们看到我们能够观察到的序列

我的目标是仅使用右列上的序列重建左列(基于每个位置的许多字母都相同的事实)

下面是重现上述示例的示例代码:

ATCG <- c("A","T","C","G")
set.seed(40)
original.seq <- sample(ATCG, 30, T)
seqS <- matrix(original.seq,200,30, T)
change.letters <- function(x, number.of.changes = 15, letters.to.change.with = ATCG) 
{
    number.of.changes <- sample(seq_len(number.of.changes), 1)
    new.letters <- sample(letters.to.change.with , number.of.changes, T)
    where.to.change.the.letters <- sample(seq_along(x) , number.of.changes, F)
    x[where.to.change.the.letters] <- new.letters
    return(x)
}
change.letters(original.seq)
insert.missing.values <- function(x) change.letters(x, 3, "-") 
insert.missing.values(original.seq)

seqS2 <- t(apply(seqS, 1, change.letters))
seqS3 <- t(apply(seqS2, 1, insert.missing.values))

seqS4 <- apply(seqS3,1, function(x) {paste(x, collapse = "")})
require(stringr)
# library(help=stringr)
all.seqS <- str_replace(seqS4,"-" , "")

# how do we allign this?
data.frame(Real_sequence = seqS4, The_sequence_we_see = all.seqS)
但在我现在介绍的例子中,我们处理的是许多序列,它们彼此对齐(而不是将它们对齐到一种模式)


在R中有没有一种已知的方法可以做到这一点?

您正在寻找一种针对多个序列的全局对齐算法。 问之前你看过维基百科吗

先了解是什么,然后寻找


维基百科并没有给出很多关于算法的细节,但更好

在R中编写对齐算法对我来说是个坏主意,但是包(函数)中有一个与算法相关的R接口。请注意,您必须首先安装此算法


或者,您可以使用任何可用的算法(例如,)并使用功能导入R中的多序列AligneMT

您可以使用软件包在R中执行多重对齐

按照您的示例,它将类似于:

library(DECIPHER)
dna <- DNAStringSet(all.seqS)
aligned_DNA <- AlignSeqs(dna)
库(解密)

dna虽然这是一个相当古老的思路,但我不想错过一个机会,因为Bioconductor 3.1,有一个包“
msa
”,它实现了三种不同的多序列比对算法的接口:ClustalW、ClustalOmega和MUSCLE。该软件包在所有主要平台(Linux/Unix、Mac OS和Windows)上运行,并且是自包含的,即不需要安装任何外部软件。更多信息可以在和上找到。

@Jules这并没有告诉他如何在R中这样做。我相信塔尔给他发送一些链接并没有真正的帮助,他可以轻松地用谷歌自己搜索。也许在他问这个问题之前很久就有了。你好,朱尔斯。感谢您的好意和演示文稿的链接。干杯Tal@Joris从他提出问题的方式来看,Tal似乎不知道这是一个标准的生物信息学问题,这就是为什么我认为这个领域的一些背景知识可能会帮助他。。。但你是对的,我应该把它作为一个评论而不是一个回答。@Jules:没有伤害的意思。你不知道塔尔是一位生物统计学家,对R有着相当深刻的了解,所以我的评论可能有点苛刻。嗨,朱尔斯。你是对的,这是我第一次尝试用R做这样的任务,因此我的查询。如前所述,建议进行背景阅读对你来说很好。Joris——你和我都知道,很少有人对R有深刻的了解,而我今天也不认为自己是他们中的一员。我仍然非常感激你的感情:)你的,塔尔希·乔里斯。我很高兴知道这样一个接口的存在(我无法从我执行的搜索中找到它)。我不知道你说的“你必须先安装这个算法”是什么意思。(你是说软件包吗?)-但我想我很快就会发现:)谢谢你的帮助:)塔利特不是一个软件包,它是一个单独的可执行文件:正如本所说。MUSCLE是一种众所周知且性能良好的多重对齐算法。因此,您必须先安装可执行文件,然后再使用bio3d软件包。寻找它有点奇怪,因为bio3d主要用于蛋白质建模。但肌肉也可以对齐多个DNA序列。请注意,这方面有新的软件包,包括
msa
,它可以处理肌肉、CLUSTALW和CLUSTALOMEGA算法。另一方面,它不依赖任何外部软件.Thx来更新信息。我把公认的答案弄丢了,但我不介意。7年后,这个答案已经过期很久了。破译公司不认为读取的数据是FASTA格式的吗?我没有看到任何关于字符串是原始字符的示例
library(Biostrings)
pairwiseAlignment(...)
library(DECIPHER)
dna <- DNAStringSet(all.seqS)
aligned_DNA <- AlignSeqs(dna)