2

Rでは、新しいクラスに演算子のオーバーロード(、、、など)を実装する方法+-? で、動物園ライブラリのソース コードを確認しました。次のコードは機能しますか?*./ops.R

Ops.zoo <- function (e1, e2) 

{
    e <- if (missing(e2)) {
        NextMethod(.Generic)
    }
    else if (any(nchar(.Method) == 0)) {
        NextMethod(.Generic)
    }
    else {
    merge(e1, e2, all = FALSE, retclass = NULL)
        NextMethod(.Generic)
    }
    out <- if (is.null(attr(e, "index"))) 
    zoo(e, index(e1), attr(e1, "frequency"))
    else
    e
    # the next statement is a workaround for a bu g in R
    structure(out, class = class(out))
}

私はmerge(e1,e2,..)ブロックで迷っています。でテストしました

 e1 <- zoo(rnorm(5), as.Date(paste(2003, 02, c(1, 3, 7, 9, 14), sep = "-")))
 e2 <- e1
 test <- merge(e1, e2, all = FALSE, retclass = NULL)

testしかしそれではNULL。仕組みはe <- {test; NextMethod(.Generic)}

4

1 に答える 1

8

必要以上に複雑な例を見ているのではないかと思います。確かに読む価値があるようですが?Ops(上記のコメント投稿者が述べたように)、基本的な例については、これを非常に簡単に行うことができます。

> `+.mychar` <- function(e1,e2) paste(e1,e2)
> x <- "a"
> y <- "b"
> class(x) <- "mychar"
> x+y
[1] "a b"

その単純なものがあなたのニーズに合わない場合は、(に加えて?Ops)次のようなより単純な例を見ることをお勧めします

`+.Date`

(逆方向の一重引用符に注意してください)

于 2011-05-30T19:58:31.633 に答える