1

我在 OOP 方面相对较新,需要建议:在 R 的引用类中重载算术泛型运算符的最佳方法是什么?

例如,假设我定义

bar <- setRefClass( "foo", fields=list(a="numeric", b="numeric" ))

如果我尝试显而易见的事情:

> bar$new(a=3,b=1) + bar$new(a=1,b=3)  
Error in bar$new(a = 3, b = 1) + bar$new(a = 1, b = 3) :  
non-numeric argument to binary operator

做(a + a)+(b + b)之类的推荐方法是什么?

4

1 回答 1

3

您可以利用引用类是 S4 + 环境这一事实,并定义一个 S4 方法:

bar <- setRefClass("foo", fields = list(a = "numeric", b = "numeric"))
one <- bar$new(a = 1, b = 1)
two <- bar$new(a = 2, b = 2)

# Find the formals for + with getGeneric("+")
setMethod("+", c("foo", "foo"), function(e1, e2) {
  bar$new(a = e1$a + e2$a, b = e1$b + e2$b)
})
one + two

为组泛型定义一组方法同样容易:

setMethod("Ops", c("foo", "foo"), function(e1, e2) {
  bar$new(a = callGeneric(e1$a, e2$a), b = callGeneric(e1$b, e2$b))
})
one / two
于 2013-08-09T17:31:23.300 回答