我有以下代码,对于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_}
}
}
}
})
答案 0 :(得分:0)
您可以将代码包装在Rprof()
:
Rprof("myloop")
## YOUR CODE HERE
Rprof(NULL) # cancel
summaryRprof("myloop")$by.self
了解到底花了多少时间。