5

我想知道是否有任何方法可以覆盖 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,有什么方法可以覆盖它吗?

4

1 回答 1

0

您的代码非常接近正确,但是 to 的参数+被称为e1and e2,而不是x1and x2。使用 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
  }
)
于 2018-11-08T09:39:47.083 回答