我必须根据结束日期和自开始以来的月数,按月生成大约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}}。
答案 0 :(得分:0)
使用以下命令生成fechas
会更快:
fechas <- mapply(seq, from=Vencimiento, by="-1 month", length.out=plazo, SIMPLIFY=FALSE)