Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.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_Performance_Alignment_Runtime_Bioinformatics - Fatal编程技术网

R-序列对齐功能运行时间过长

R-序列对齐功能运行时间过长,r,performance,alignment,runtime,bioinformatics,R,Performance,Alignment,Runtime,Bioinformatics,所以,我对R相当陌生,我有一个运行时问题。我使用“Biostrings”包(biocLite)编写了以下嵌套while循环,以便链接来自两个物种的蛋白质序列,如果它们的比对分数>90% 基本上,我输入两个蛋白质基因组,将SeqData1中的每个氨基酸序列与SeqData2中的每个氨基酸序列进行比较,计算一个比对分数,如果分数>90%,我将连接一个匹配的蛋白质名称列表和SeqData2蛋白质序列 这个函数的工作原理和它应该的完全一样,唯一的问题是它需要扫描的蛋白质数量,我预测整个过程的运行时间大约

所以,我对R相当陌生,我有一个运行时问题。我使用“Biostrings”包(biocLite)编写了以下嵌套while循环,以便链接来自两个物种的蛋白质序列,如果它们的比对分数>90%

基本上,我输入两个蛋白质基因组,将SeqData1中的每个氨基酸序列与SeqData2中的每个氨基酸序列进行比较,计算一个比对分数,如果分数>90%,我将连接一个匹配的蛋白质名称列表和SeqData2蛋白质序列

这个函数的工作原理和它应该的完全一样,唯一的问题是它需要扫描的蛋白质数量,我预测整个过程的运行时间大约是1.4个月。T

有人对如何以指数方式加速此函数的运行时有什么建议吗

谢谢

R代码:

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