Мне нужно сгенерировать около 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
, которые находятся в переменной Vencimiento
) и вектор с числом месяцев с начала, которые находятся в переменной plazo
.
Переменная res_lista
также будет иметь список с последовательностью дат.Входными данными для их генерации являются список исходных дат (в данном случае переменная fechas
) и вектор с другими датами (vec_ayuda
), который будет определять новую позицию последовательности дат в списке fechas
.