簡體   English   中英

如何為R中的is.holiday()chron包定義假期

[英]How to define holidays for is.holiday() chron package in R

我正在嘗試使用chronis.holiday()函數,但是我無法使用它。 文檔說要修改.Holiday對象與你想要使用的假期,但是我對is.holiday()似乎沒有檢測到.Holiday所做的更改。 有人可以提供一個加載假期的適當方法的例子嗎?

這是非平凡的,可能應該被稱為chron維護者作為bug。

library(chron)
library(timeDate)
hlist <- c("CAVictoriaDay","CACanadaDay","CALabourDay")
(ss <- dates(sapply(sapply(hlist,holiday,year=2011),as.Date)))
.Holidays <- ss

(有人誰實際上R中日期的作品往往比我做的大概有前面的東西更優雅的解決方案,而沒有雙sapply事情...)

但這並沒有改變重要的事情,即chron命名空間中Holidays版本:

chron::.Holidays  ## no change

線索在這里: 覆蓋在命名空間中導入的函數

命名空間魔術:

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)

我試圖做同樣的事情,發現這篇較老的帖子。 我不需要修改.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 

在仔細研究了這個主題之后,我發現使用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)

我希望它對某人有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM