改善循环的运行时间

时间:2016-07-28 21:12:11

标签: r loops runtime

我有以下代码,对于1个组合(Comb),它需要2分钟才能运行。我需要在20,000个组合上运行它。 df_ncol = 200,nrow = 10000。 有关如何改善运行时间的任何想法?

对于每个组合,我正在执行以下操作:

将J列的值复制到一个新列中,该列将使用相同的名称和一些附加到名称的值。然后,我在所有行上对该新列执行转换(有时我之前是循环退出,请参阅代码中的IF部分)。转换完成后,我将转到下一列并执行相同的操作。一旦使用双倍数量的列填充表格,代码中不包含另一个部分,该部分仅保存此最终表格中的总和,此总和运行得相当快。在此之后,我将移动到下一个组合并创建另一个表,依此类推,直到我得到最后一个组合值。当我在行上运行时,瓶颈发生在转换阶段。我是R的新手,我相信我错过了如何改进这个阶段的知识。

system.time({
    for(f in 1:Comb){

        for(j in names(dfnew1)[4:df_ncol]){ 
            ar<-final[f,j]  
            dfnew1[[paste(j, 'a', ar,sep="_")]]<-dfnew1[[j]] 

            last=ind[[j]]
            index_num=index[j]+1

            for(i in index_num:nrow_){
                 dfnew1[[paste(j, 'a',ar, sep="_")]][i] <- dfnew1[[j]][i]+ ar * dfnew1[[paste(j,'a',ar,sep="_")]][i-1]
                 if (i>last & (dfnew1[[paste(j, 'a',ar, sep="_")]][i]<(0.05*dfnew1[[j]][last]))){i=nrow_}
            }
       }
    }
})

1 个答案:

答案 0 :(得分:0)

您可以将代码包装在Rprof()

Rprof("myloop")

 ## YOUR CODE HERE

Rprof(NULL) # cancel
summaryRprof("myloop")$by.self

了解到底花了多少时间。