Я думаю, что у вас было две проблемы: одна в самой функции, и одна во входах. Во-первых, даты неправильно форматировались внутри функции, что вызывало проблемы для seq()
и вызывало ошибки, связанные с аргументом by
. Вам нужно указать as.Date()
формат дат, которые вы предоставляете, поэтому вот полная (исправленная) функция:
DateSeq <- function(st, en, freq) {
library(zoo)
freq <- ifelse(freq > 0, freq, 1)
st <- as.Date(st, format="%d-%m-%Y")
en <- as.Date(en, format="%d-%m-%Y")
dateseq <- as.Date(seq(as.yearmon(st), as.yearmon(en), by = 1/freq), frac = 1)
#if (st!=dateseq[1]){dateseq<-c(st,dateseq)}
dateseq[1] <- st
if (en > dateseq[length(dateseq)]) {
dateseq <- c(dateseq, en)
}
if (en < dateseq[length(dateseq)]) {
dateseq <- c(dateseq[-length(dateseq)], en)
}
dateseq
}
Во-вторых, дата окончания, указанная вами в вопросе (30 марта 2018 г.), предшествует дате, которую вы указали. который, я думаю, тоже вызывал проблемы. Вот полный вызов и вывод, который соответствует желаемому результату.
s <- "26-06-2018"
e <- "30-03-2020"
f <- 12
repayment_dates <- DateSeq(s, e, f)
#Output
> repayment_dates
[1] "2018-06-26" "2018-07-31" "2018-08-31" "2018-09-30" "2018-10-31" "2018-11-30"
[7] "2018-12-31" "2019-01-31" "2019-02-28" "2019-03-31" "2019-04-30" "2019-05-31"
[13] "2019-06-30" "2019-07-31" "2019-08-31" "2019-09-30" "2019-10-31" "2019-11-30"
[19] "2019-12-31" "2020-01-31" "2020-02-29" "2020-03-30"