R需要太长时间才能生成日期序列

时间:2019-02-26 14:45:02

标签: r

我必须根据结束日期和自开始以来的月数,按月生成大约45000个日期序列。然后,我必须将日期移动到另一个向量中最接近的日期(不必具有相同的长度)。我正在使用lubridate函数%m-%lapply中添加所需的月数,然后使用findInterval根据其他向量移动日期。我的问题是它花费的时间太长,例如在笔记本电脑中需要2.5分钟,而且我必须多次这样做。有没有一种方法可以在不并行的情况下加快进程?

这是我的代码的示例:

library(lubridate)
vec_ayuda = sort(seq(Sys.Date(),length.out = 50000,by = "day")[sample(1:50000,48000)])
Vencimiento = seq(Sys.Date(),length.out = 45000,by = "day")
plazo = runif(45000,15,230)
fechas = lapply(1:length(Vencimiento),function(x)
  sort(Vencimiento[x]%m-%months(c(1:(plazo[x]))-1)))
res_lista = lapply(fechas,function(x) 
  as.matrix(x[findInterval(x,vec_ayuda)]))

变量fechas将具有带有日期序列的列表。生成它们的输入是日期向量(变量为as.Date的{​​{1}}格式)和变量Vencimiento中没有开始日期的月份的向量。

变量plazo还将具有带有日期序列的列表。生成日期的输入是原始日期列表(在这种情况下为变量res_lista)和带有其他日期的向量(fechas),这些向量将确定日期序列在列表{中的新位置{1}}。

1 个答案:

答案 0 :(得分:0)

使用以下命令生成fechas会更快:

fechas <- mapply(seq, from=Vencimiento, by="-1 month", length.out=plazo, SIMPLIFY=FALSE)