R занимает слишком много времени для генерации последовательности дат - PullRequest
0 голосов
/ 26 февраля 2019

Мне нужно сгенерировать около 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.

1 Ответ

0 голосов
/ 01 марта 2019

Использование следующего для генерации fechas будет быстрее:

fechas <- mapply(seq, from=Vencimiento, by="-1 month", length.out=plazo, SIMPLIFY=FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...