为Date类创建一个新的加法运算符

时间:2013-03-10 10:37:42

标签: r datetime operators

我想为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

请不要只是为了总结几个对象而建议一些花哨的库。最好在他们的代码中分享想法。

1 个答案:

答案 0 :(得分: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