我想知道是否有任何方法可以覆盖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,有没有办法覆盖它?
答案 0 :(得分:0)
您的代码非常正确,但是+
的参数称为e1
和e2
,而不是x1
和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
}
)