不确定这个答案是否适合您。我对你的问题很好奇,我已经下载了timeDate
来自 CRAN 的包。虽然它似乎记录在?holiday
,我认为代码还没有准备好GBNewYearsEve
.
如果我按原样运行你的代码,我会得到:
> hlist <- c("GBMayDay", "GBBankHoliday", "GBSummerBankHoliday", "ChristmasEve", "ChristmasDay", "BoxingDay", "NewYearsDay", "GBNewYearsEve")
>
> (ss <- dates(sapply(sapply(hlist,holiday,year=2011),as.Date)))
Error in get(as.character(FUN), mode = "function", envir = envir) :
el objeto 'GBNewYearsEve' de modo 'function' no fue encontrado
(抱歉,语言混合,基本上错误消息是这样的GBNewYearsEve
没找到。我实际上在代码中没有找到它timeDate
。但是,如果我添加这样的定义:
GBNewYearsEve =
function(year = getRmetricsOptions("currentYear")) {
ans = year*10000 + 1231
timeDate(as.character(ans)) }
(基本上是复制自DENewYearsEve
,包中存在的除夕夜的唯一定义)
然后我让你的代码运行:
> (ss <- dates(sapply(sapply(hlist,holiday,year=2011),as.Date)))
GBMayDay GBBankHoliday GBSummerBankHoliday ChristmasEve ChristmasDay BoxingDay
05/02/11 05/30/11 08/29/11 12/24/11 12/25/11 12/26/11
NewYearsDay GBNewYearsEve
01/01/11 12/31/11
但是我不确定这个解决方案有多好。请注意,在dateTime
,完成一些额外的转换,例如当假期恰逢周末时,则移至第二天。使用上面的代码,您将获得 12 月 31 日的除夕夜。
例如,这是在holiday-LONDON.R
:
# New Year's Day: if it falls on Sat/Sun, then is
# moved to following Monday
posix1 <- as.POSIXlt(NewYearsDay(y))
if (posix1$wday == 0 | posix1$wday == 6) {
lon <- timeDate(.on.or.after(y, 1, 1, 1), zone = "London",
FinCenter = "Europe/London")
holidays <- c(holidays, as.character(lon))
} else {
holidays <- c(holidays, as.character(posix1))
}
我猜这个包只处理每个国家的法定假日,并添加那些额外的规则?