2011-09-16 12 views
7

Sto provando ad usare la funzione chronis.holiday(), ma ho problemi a far funzionare. La documentazione dice di modificare l'oggetto .Holiday con le festività che si desidera utilizzare, ma le modifiche apportate a .Holiday non sembrano essere rilevate da is.holiday(). Qualcuno potrebbe fornire un esempio del modo appropriato per caricare le vacanze?Come definire le festività per is.holiday() pacchetto chron in R

risposta

9

Questo non è banale e probabilmente merita di essere riferito al manutentore chron come un bug.

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

(Qualcuno che in realtà lavora con date in R più spesso di me probabilmente ha una soluzione più elegante per la roba precedente, senza che doppio-sapply cosa ...)

Ma questo doesn' t cambiare la cosa importante, che è la versione di Holidaysnel chron namespace:

chron::.Holidays ## no change 

l'indizio è qui: Override a function that is imported in a namespace

Namespace magia:

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")) 

ora guarda, e ha funzionato:

chron::.Holidays 

provarlo:

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) 
+0

Grazie. È stato molto più complicato di quanto mi aspettassi. –

+0

La soluzione sopra riportata è fantastica e funziona, con l'eccezione che sembra esserci un errore se hlist include "GBNewYearsEve" Ho iniziato una nuova domanda su questo [collegamento] (http://stackoverflow.com/questions/ 26777282/a-con-TimeDate-r-package-i-ricevere-un-errore-quando-specifica-gbnewyearseve) – DaveRGP

0

stavo cercando di fare la stessa cosa e hanno trovato questo post più vecchio. Non ho bisogno di modificare .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 
Problemi correlati