R 2.15中的覆盖方法

时间:2013-04-01 08:42:12

标签: r methods s4

我想知道是否有任何方法可以覆盖R包中的任何运算符方法。

包中源代码的示例:

setclass("clsTest",  representation(a="numeric", b="numeric"))
setMethod("+",  signature(x1 = "numeric", x2 = "clsTest"),
      definition=function(x1, x2) {
      Test = x2
      Test@a = Test@a+x1
      Test@b = Test@b+x1
      Test

      })

我想用

覆盖现有包中的方法
setMethod("+",  signature(x1 = "numeric", x2 = "clsTest"),
          definition=function(x1, x2) {
          Test = x2
          Test@a = Test@a+(2*x1)
          Test@b = Test@b+(2*x1)
          Test

          })

我正在使用R 2.15.2,有没有办法覆盖它?

1 个答案:

答案 0 :(得分:0)

您的代码非常正确,但是+的参数称为e1e2,而不是x1x2。使用S4,编写方法时无法重命名它们。

如果您想知道应该如何知道它们的名字,可以使用args("+")进行检查。

正确的代码是

setClass("clsTest",  representation(a="numeric", b="numeric")) -> clsTest
setMethod("+",  signature(e1 = "numeric", e2 = "clsTest"),
  definition=function(e1, e2) {
    Test = e2
    Test@a = Test@a+e1
    Test@b = Test@b+e1
    Test
  }
)