R:运算符重载和动物园对象中的Ops.zoo

aha*_*ala 2 r zoo

在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))
}
Run Code Online (Sandbox Code Playgroud)

我迷失在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)
Run Code Online (Sandbox Code Playgroud)

但后来testNULL.请问该怎么e <- {test; NextMethod(.Generic)}工作的?

Ben*_*ker 8

我想你可能正在看一个比必要更复杂的例子.它当然值得一读?Ops(如上述评论者所述),但对于基本示例,您可以非常轻松地完成此操作:

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

如果那些简单的东西不适合你的需要,我会建议(除此之外?Ops)看一个更简单的例子

`+.Date`
Run Code Online (Sandbox Code Playgroud)

(注意后向单引号)