2013-03-10 91 views
3

我想爲Date類定義一個加法運算,以便增加幾個月,而不是那幾天。爲Date類創建一個新的加法運算符

這工作:

`+.Date`<- function(date,n) seq(date, by = paste (n, "months"), length = 2)[2] 

不幸的是它破壞(面具)的天數按原來的加法運算。

這工作,以及:

`%+%`<- function(date,n) seq(date, by = paste (n, "months"), length = 2)[2] 

但它不是具體的Date類。

可以定義一個優雅退出。

`%+%`<- function(date,n) { 
    if (class(date)=="Date") return (seq(date, by = paste (n, "months"), length = 2)[2]) 
    else stop("%+% only valid for Date + numeric") 
} 

總之,理想的情況是Date定義的操作%+%,像+.Date

rm("%+%") 
`%+%.Date`<- function(date,n) seq(date, by = paste (n, "months"), length = 2)[2] 

但:

as.Date("2010/1/1") %+% 2 
Error: could not find function "%+%" 

你能解決%+%.Date?我們是否需要重新定義類Date

請不要建議一些花哨的圖書館來總結一些對象。更好地分享他們的代碼中的想法。

回答

5

你只需要定義%+%爲好,使之成爲通用的功能:

`%+%` <- function(x,y) UseMethod("%+%") 
`%+%.Date` <- function(date,n) seq(date, by = paste (n, "months"), length = 2)[2] 

as.Date("2010-01-01") %+% 2 # 2010-03-01 
1 %+% 1      # Error 
+0

+1謝謝,正是我無法在文檔中找到。 – antonio 2013-03-10 11:03:35