我正在尝试使用它chron的is.holiday()功能,但我无法让它工作.文档说要修改.Holiday您希望使用的假期对象,但我所做的更改.Holiday似乎没有被检测到is.holiday().有人可以提供一个加载假期的适当方法的例子吗?
这是非平凡的,可能值得将chron维护者称为bug.
library(chron)
library(timeDate)
hlist <- c("CAVictoriaDay","CACanadaDay","CALabourDay")
(ss <- dates(sapply(sapply(hlist,holiday,year=2011),as.Date)))
.Holidays <- ss
Run Code Online (Sandbox Code Playgroud)
(实际上在R中使用日期的人比我更常使用前面的东西更优雅的解决方案,没有那么双重sapply......)
但是,这并不能改变重要的事情,这是该版本Holidays 的chron命名空间:
chron::.Holidays ## no change
Run Code Online (Sandbox Code Playgroud)
线索在这里:覆盖在命名空间中导入的函数
命名空间魔术:
unlockBinding(".Holidays", as.environment("package:chron"))
assignInNamespace(".Holidays", .Holidays, ns="chron",
envir=as.environment("package:chron"))
assign(".Holidays", .Holidays, as.environment("package:chron"))
lockBinding(".Holidays", as.environment("package:chron"))
Run Code Online (Sandbox Code Playgroud)
现在看,它有效:
chron::.Holidays
Run Code Online (Sandbox Code Playgroud)
测试出来:
yrvec <- seq.Date(as.Date("2011-01-01"),
as.Date("2011-12-31"),by="day")
plot(is.holiday(yrvec),axes=FALSE)
axis.Date(side=1,yrvec)
Run Code Online (Sandbox Code Playgroud)