0

在 R 中使用时,我试图排除以下日期bizdays():2021-02-15 和 2021-02-16。

我有以下代码:

library(bizdays)
library(lubridate)

create.calendar(name='MyCalendar', weekdays=c('sunday', 'saturday'),
            adjust.from=adjust.next, adjust.to=adjust.previous, financial=F)
bizdays.options$set(default.calendar='MyCalendar')

现在,当我写作时,例如:

bizdays(ymd("2021-02-01"), ymd("2021-02-17"))

正如预期的那样,我得到“13”作为输出。但是,我试图排除这两个日期(2021-02-15 和 2021-02-16)。鉴于此,我想在编写时得到“11”作为输出bizdays(ymd("2021-02-01"), ymd("2021-02-17"))

此外,每当我计算 2 月和/或其他月份的任何日期之间的营业日时,我都想排除 2021-02-15 和 2021-02-16 。因此,当我计算时,我bizdays(ymd("2021-02-01"), ymd("2021-02-28"))想得到“18”而不是“20”;当我计算时,我bizdays(ymd("2021-01-23"), ymd("2021-02-28"))想得到“23”而不是“25”。

我已经尝试在使用时将这些日期作为假期包含在向量中create.calendar()

create.calendar(name='MyCalendar', weekdays=c('sunday', 'saturday'),
            adjust.from=adjust.next, adjust.to=adjust.previous, financial=F,
            holidays = c(ymd("2021-02-15"), ymd("2021-02-16")))
bizdays.options$set(default.calendar='MyCalendar')

但是当我写的时候bizdays(ymd("2021-02-01"), ymd("2021-02-17")),我得到以下错误:

Error in bizdays.Date(ymd("2021-02-01"), ymd("2021-02-17")) : 
  Given date out of range.

我该如何解决这个问题?

谢谢!

更新:正如@Terru_theTerror 的回复评论中提到的,当我使用create.calendar().

4

1 回答 1

0

我终于解决了。

根据create.calendar()函数的 R 文档:

参数 start.date 和 end.date 可以设置,但是一旦它们不设置并且设置了假期,start.date 被定义为 min(holidays),end.date 被定义为 max(holidays)。如果未设置假期 start.date 设置为“1970-01-01”,end.date 设置为“2071-01-01”。

因此,在创建日历时,确实应该在“假期”向量中包含“2021-02-15”和“2021-02-16”作为日期。问题是,还必须指定默认情况下的“start.date”和“end.date”参数:

create.calendar(name='MyCalendar', weekdays=c('sunday', 'saturday'),
                adjust.from=adjust.next, adjust.to=adjust.previous, financial=F,
                holidays = c(ymd("2021-02-15"), ymd("2021-02-16")),
                start.date = ymd("1970-01-01"), end.date = ymd("2071-01-01"))
bizdays.options$set(default.calendar='MyCalendar')

这很完美!

于 2021-02-19T14:47:10.847 回答