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 に答える