我遇到了一段需要很长时间才能执行的代码的挑战,我想知道优化此代码执行时间的关键技巧是什么。我不得不承认输入 data.frame 很重要(140,000 行),而输出 data.frame 大约有 220,000 行。
输入 data.frame 的示例:
head(extremes)
X_BusinessIDDescription min max month
ID105 2007-12-01 2008-06-01 2007-12-01
ID206 2007-12-01 2009-07-01 2007-12-01
ID204 2007-12-01 2008-02-01 2007-12-01
ID785 2008-07-01 2010-08-01 2008-07-01
ID125 2007-11-01 2008-07-01 2007-11-01
ID107 2007-11-01 2011-06-01 2007-11-01
将使用循环扩展的 data.frame。启动 data.frame 以使结构到位。
output <- extremes[1,]
output
X_BusinessIDDescription min max month
ID105 2007-12-01 2008-06-01 2007-12-01
其他值
IDcounter <- 1
IDmax <- nrow(extremes)
linecounter <- 1
我想优化的while循环:
while (IDcounter <= IDmax){
start <- extremes$min[IDcounter]
end <- extremes$max[IDcounter] # add three months
while(start <= end){
output[linecounter,] <- extremes[IDcounter,]
output$month[linecounter] <- start
linecounter <- linecounter+1
start <- seq(start, by ="month", length=2)[2]
}
IDcounter <- IDcounter + 1
}
对于少数行,此代码执行得非常快,但随着输出的扩展,它似乎正在减慢。
输出看起来像这样:
head(output)
X_BusinessIDDescription min max month
ID105 2007-12-01 2008-06-01 2007-12-01
ID105 2007-12-01 2008-06-01 2008-01-01
ID105 2007-12-01 2008-06-01 2008-02-01
ID105 2007-12-01 2008-06-01 2008-03-01
ID105 2007-12-01 2008-06-01 2008-04-01
ID105 2007-12-01 2008-06-01 2008-05-01
对于极端文件中 min 和 max 之间的间隔中的每个月,都会创建一行。
我也有兴趣了解如何让这段代码为可用的计算资源的多个核心做好准备。好的,我承认这并不是真正的优化,但它会减少执行时间,这也很重要。
约赫姆