R 提高循环的运行时间

R 提高循环的运行时间,r,loops,runtime,R,Loops,Runtime,我有以下代码,对于1个组合(Comb),运行需要2分钟。我需要在20000个组合上运行它。df_ncol=200,nrow=10000。 有没有关于如何提高跑步时间的想法 对于每个组合,我将执行以下操作: 将列J的值复制到一个新列中,该列将采用相同的名称和附加到名称上的某些值。然后,我对所有行上的新列执行一个转换(有时我会在之前退出循环,请参阅代码中的IF部分)。转换完成后,我将转到下一个专栏并执行相同的操作。一旦表中填充了双倍数量的列,代码中就不包括另一部分,它只保存最后一个表中的总和,这个总

我有以下代码,对于1个组合(Comb),运行需要2分钟。我需要在20000个组合上运行它。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_}
            }
       }
    }
})
system.time({
用于(1中的f:Comb){
对于(j in names(dfnew1)[4:df_ncol]){

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


并找出最花时间的是什么。

您没有包含任何数据,因此我们无法运行或测试您的代码。当您提出问题时,请确保包含一个。最好描述您正在尝试做什么,而不仅仅是向我们展示您决定如何做。您有一个相当大的数据表、常量循环和添加额外列ns到现有数据帧的速度较慢。您可能会发现将辅助表预分配到正确的大小,然后在计算列时更新列会更快。谢谢,我会尝试一下。我已收到此输出,我不确定问题出在哪里,使用[[?self.time self.pct total.time total.pct“粘贴”14.44 17.28 14.44 17.28“[[RStudio的较新版本内置了分析工具。
Rprof("myloop")

 ## YOUR CODE HERE

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