如何定义S4方法取对象的反面?

时间:2015-12-10 17:20:53

标签: r s4

假设我有一个名为testClass的S4类。内容与此问题的目的无关,但让它包含一个数值。

#' An S4 class that stores a list.
#' @export
setClass("testClass", 
                 representation(a="numeric"))

我想定义一个方法,就像对象一样。例如:

vec <- rnorm(10)
-vec

我认为这会声明一个Arith方法,第一个参数缺失。

#' @export
setMethod("Arith", c(e1="missing", e2="testClass"),
                    function(e1, e2)
                    {
                        op = .Generic[[1]]
                        switch(op,
                            `-` = return(-e2@a)
                        )
                    }
)

但是,当我尝试应用该方法时,我收到以下错误:

tc <- new("testClass", a=2)
-tc
  

-tc中的错误:一元运算符的无效参数

1 个答案:

答案 0 :(得分:6)

哈!在摆弄了一些之后,我发现需要缺少e2参数。以下作品:

#' @export
setMethod("Arith", c(e1="testClass", e2="missing"),
                    function(e1, e2)
                    {
                        op = .Generic[[1]]
                        switch(op,
                            `-` = return(-e1@a)
                        )
                    }
)