我正在尝试使用chron
的{{1}}功能,但我无法让它发挥作用。文档说明要修改您希望使用的假期is.holiday()
对象,但.Holiday
似乎没有检测到我对.Holiday
所做的更改。有人可以提供一个加载假期的适当方法的例子吗?
答案 0 :(得分:9)
这非常重要,可能应该被称为chron
维护者。
library(chron)
library(timeDate)
hlist <- c("CAVictoriaDay","CACanadaDay","CALabourDay")
(ss <- dates(sapply(sapply(hlist,holiday,year=2011),as.Date)))
.Holidays <- ss
(实际上在R中使用日期的人比我更常使用前面的东西更优雅的解决方案,没有那个双重的sapply
......)
但这不会改变重要的事情,即Holidays
命名空间中chron
的版本:
chron::.Holidays ## no change
线索在这里:Override a function that is imported in a namespace
命名空间魔术:
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"))
现在看,它已经奏效了:
chron::.Holidays
测试出来:
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)
答案 1 :(得分:2)
我试图做同样的事情并发现这篇较老的帖子。我不需要修改.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
答案 2 :(得分:0)
在仔细研究了这个主题之后,我发现使用RQuantLib软件包可以使此解决方案特别简单,因此在这方面,RQuantLib可能更简单。
install.packages("RQuantLib")
library(RQuantLib)
isBusinessDay(calendar="WeekendsOnly", dates=yourdatesofinterest)
您可以使用不同的日历修改此代码,以在周末将不同国家/地区的不同假期集(仅举一个例子,但还有更多)。
isBusinessDay(calendar="UnitedStates", dates=yourdatesofinterest)
isBusinessDay(calendar="UnitedStates/Settlement", dates=yourdatesofinterest)
isBusinessDay(calendar="UnitedStates/NYSE", dates=yourdatesofinterest)
isBusinessDay(calendar="Sweden", dates=yourdatesofinterest)
isBusinessDay(calendar="Mexico", dates=yourdatesofinterest)
我希望它能对某人有所帮助