R-序列对齐功能运行时间过长
所以,我对R相当陌生,我有一个运行时问题。我使用“Biostrings”包(biocLite)编写了以下嵌套while循环,以便链接来自两个物种的蛋白质序列,如果它们的比对分数>90% 基本上,我输入两个蛋白质基因组,将SeqData1中的每个氨基酸序列与SeqData2中的每个氨基酸序列进行比较,计算一个比对分数,如果分数>90%,我将连接一个匹配的蛋白质名称列表和SeqData2蛋白质序列 这个函数的工作原理和它应该的完全一样,唯一的问题是它需要扫描的蛋白质数量,我预测整个过程的运行时间大约是1.4个月。T 有人对如何以指数方式加速此函数的运行时有什么建议吗 谢谢 R代码:R-序列对齐功能运行时间过长,r,performance,alignment,runtime,bioinformatics,R,Performance,Alignment,Runtime,Bioinformatics,所以,我对R相当陌生,我有一个运行时问题。我使用“Biostrings”包(biocLite)编写了以下嵌套while循环,以便链接来自两个物种的蛋白质序列,如果它们的比对分数>90% 基本上,我输入两个蛋白质基因组,将SeqData1中的每个氨基酸序列与SeqData2中的每个氨基酸序列进行比较,计算一个比对分数,如果分数>90%,我将连接一个匹配的蛋白质名称列表和SeqData2蛋白质序列 这个函数的工作原理和它应该的完全一样,唯一的问题是它需要扫描的蛋白质数量,我预测整个过程的运行时间大约
SeqScore <- function()
{
source("http://bioconductor.org/biocLite.R")
biocLite()
require("Biostrings")
data(BLOSUM100)
SeqData1 <- readDNAStringSet("SeqData1.fasta")
proNum1 = 84390 # number of proteins in Seq1
SeqData2 <- readDNAStringSet("SeqData2.fasta")
proNum2 = 15194 # number of proteins in Seq
#Create empty list to fill with percent scores and matching sequences:
DList=NULL
QueSeqList = NULL
TotList = NULL
#initiating the counters:
i=1
j=1
c=0
#Perform alignment and generate percent identity scores:
while(i<=proNum1)
{
while(j<=proNum2)
{
SeqAlign <- pairwiseAlignment(SeqData1[i], SeqData2[j], substitutionMatrix=BLOSUM100, gapOpening=0, gapExtension=-5)
PercAlign <- pid(SeqAlign)
if(PercAlign>=90)
{
DList = c(DList, names(SeqData1[i]), names(SeqData2[j]))
QueSeqList = c(QueSeqList, toString(SeqData2[j]))
c=c+1
}
else{c=c+1; print(c)}
j=j+1
}
i=i+1
j=1 #to reset the inner while loop
}
unlist<-t(sapply(DList, unlist));
outputMatrix<-cbind(DList,QueSeqList)
outputMatrix<-as.matrix(outputMatrix, ncol=3)
write.csv(outputMatrix, "outputMatrix.csv")
}
SeqScore在帮助页面中,我认为当它的第一个参数是任意长度的DNAStringSet
时,pairwiseallignment
可以工作,因此外部循环可以由
SeqAlign <- pairwiseAlignment(SeqData1, SeqData2[j],
substitutionMatrix=BLOSUM100, gapOpening=0, gapExtension=-5)
这将使您从R地狱的第二个循环中解脱出来,并且还建议了一种简单的策略,如果计算速度仍然很慢,可以在非窗口上对其进行并行化:
library(parallel)
options(mc.cores=detectCores())
results <- mclapply(seq_along(... ## as before
库(并行)
选项(mc.cores=detectCores())
结果很抱歉,但当我运行您的代码时,我在readDNAStringSet(…)
中遇到以下错误:在.Call2(“new_input_ExternalFilePtr”,fp,PACKAGE=“Biostrings”):无法打开文件“SeqData1.fasta”
(与SeqData2.fsta相同)。“SeqData1.fasta”只是我用于示例的任意名称。我计划将此代码用于各种基因组。要获得帮助,您确实需要提供一个示例数据集(在本例中是一个或多个数据集)。如果您提供sample.fasta文件(每个文件可能只有5个序列?),那么相关方就更容易对代码进行故障排除。虽然我觉得你的问题很有趣,但我没有动力去NCBI获取样本数据。如果我可以将整个代码块粘贴到一个新的r会话中并运行它就更好了。以c
的方式递增对象似乎是最重要的瓶颈。看,圈2:生长的物体。谢谢!完美答案。这个网站充满了真正的知识渊博的人,所以当一两个人真的回答了一个问题时,我非常高兴。再次感谢。
library(parallel)
options(mc.cores=detectCores())
results <- mclapply(seq_along(... ## as before