2011-09-16 21 views
7

Tôi đang cố gắng sử dụng chức năng 's is.holiday(), nhưng tôi đang gặp khó khăn khi làm việc đó. Tài liệu hướng dẫn sửa đổi đối tượng .Holiday với những ngày nghỉ mà bạn muốn sử dụng, nhưng những thay đổi tôi đã thực hiện cho .Holiday dường như không bị phát hiện bởi is.holiday(). Ai đó có thể cung cấp một ví dụ về cách thích hợp để tải ngày lễ?Cách xác định ngày lễ cho gói is.holiday() chron trong R

Trả lời

9

Điều này là không tầm thường và có thể đáng được giới thiệu đến người bảo trì chron dưới dạng lỗi.

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

(Một người thực sự làm việc với ngày tháng trong R thường xuyên hơn hơn tôi có thể có một giải pháp thanh lịch hơn cho những thứ trên, mà không có đúp sapply điều ...)

Nhưng điều này doesn' t thay đổi điều quan trọng, đó là phiên bản của Holidaystrong chron namespace:

chron::.Holidays ## no change 

các đầu mối là ở đây: Override a function that is imported in a namespace

Namespace kỳ diệu:

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

Bây giờ nhìn, và nó đã làm việc:

chron::.Holidays 

Kiểm tra nó ra:

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

Cảm ơn. Điều đó phức tạp hơn nhiều so với tôi mong đợi. –

+0

Các giải pháp trên là tuyệt vời, và các công trình, với ngoại lệ mà có vẻ như một lỗi nếu hlist bao gồm "GBNewYearsEve" Tôi đã bắt đầu một câu hỏi mới trên [link] đó (http://stackoverflow.com/questions/ 26777282/trong-sử dụng-thời gian-r-gói-i-nhận-một-lỗi-khi-chỉ định-gbnewyearseve) – DaveRGP

0

Tôi đã cố gắng để làm điều tương tự và thấy bài đăng cũ hơn này. Tôi không cần phải sửa đổi .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 
Các vấn đề liên quan