I'm trying to use chron
's is.holiday()
function, but I'm having trouble getting it to work. The documentation says to modify the .Holiday
object with the holidays that you wish to use, but the changes I've made to .Holiday
don't seem to be detected by is.holiday()
. Could someone provide an example of the appropriate way to load holidays?
This is non-trivial and probably deserves to be referred to the chron
maintainer as a bug.
library(chron)
library(timeDate)
hlist <- c("CAVictoriaDay","CACanadaDay","CALabourDay")
(ss <- dates(sapply(sapply(hlist,holiday,year=2011),as.Date)))
.Holidays <- ss
(Someone who actually works with dates in R more often than I do probably has a more elegant solution for the preceding stuff, without that double-sapply
thing ...)
But this doesn't change the important thing, which is the version of Holidays
in the chron
namespace:
chron::.Holidays ## no change
The clue is here: Override a function that is imported in a namespace
Namespace magic:
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"))
Now look, and it has worked:
chron::.Holidays
Test it out:
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)
I was trying to do the same thing and found this older post. I didn't need to modify .Holidays
:
library(timeDate);library(chron)
hlist <- c("USChristmasDay","USGoodFriday","USIndependenceDay","USLaborDay",
"USNewYearsDay","USThanksgivingDay")
myholidays <- dates(as.character(holiday(2000:2013,hlist)),format="Y-M-D")
> is.holiday(as.Date("2013-11-28"),myholidays)
[1] TRUE
> chron::.Holidays
New Years Day Memorial Day Independence Day Labor Day Thanksgiving Christmas
01/01/92 05/25/92 07/04/92 09/07/92 11/26/92 12/25/92
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With