我想为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
?
请不要只是为了总结几个对象而建议一些花哨的库。最好在他们的代码中分享想法。
答案 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