3

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

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

4

1 回答 1

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
于 2013-03-10T10:49:02.690 回答