Как определить праздники для пакета is.holiday () chron в R - PullRequest
7 голосов
/ 17 сентября 2011

Я пытаюсь использовать функцию chron is.holiday(), но у меня возникают проблемы с тем, чтобы заставить ее работать. Документация говорит, что нужно модифицировать объект .Holiday с теми выходными, которые вы хотите использовать, но внесенные мной изменения в .Holiday, похоже, не обнаруживаются is.holiday(). Может ли кто-нибудь привести пример подходящего способа загрузки праздников?

Ответы [ 3 ]

9 голосов
/ 17 сентября 2011

Это нетривиально и, вероятно, заслуживает упоминания сопровождающего 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 namespace :

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)
2 голосов
/ 26 сентября 2013

Я пытался сделать то же самое и нашел этот старый пост.Мне не нужно было изменять .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 
0 голосов
/ 14 мая 2019

После долгого изучения этой темы я обнаружил, что это решение особенно просто с помощью пакета 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)

Надеюсь, это кому-нибудь поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...