【发布时间】:2012-01-20 06:48:02
【问题描述】:
我有一个 S4 类,我想定义这些对象的线性组合。
是否可以在这个特定的类上调度 * 和 + 函数?
【问题讨论】:
标签: r operator-overloading s4
我有一个 S4 类,我想定义这些对象的线性组合。
是否可以在这个特定的类上调度 * 和 + 函数?
【问题讨论】:
标签: r operator-overloading s4
+ 运算符是 Arith 组泛型的一部分(请参阅?GroupGenericFunctions),因此可以使用
setMethod("Arith", "yyy", function(e1, e2) {
v = callGeneric(e1@v, e2@v)
new("yyy", v = v)
})
然后用
setClass("yyy", representation(v="numeric"))
setMethod(show, "yyy", function(object) {
cat("class:", class(object), "\n")
cat("v:", object@v, "\n")
})
setMethod("Arith", "yyy", function(e1, e2) {
v = callGeneric(e1@v, e2@v)
new("yyy", v = v)
})
会有的
> y1 = new("yyy", v=1)
> y2 = new("yyy", v=2)
> y1 + y2
class: yyy
v: 3
> y1 / y2
class: yyy
v: 0.5
## ...and so on
【讨论】:
new("yyy", v = callGeneric(e1@v, e2@v), w = callGeneric(e1@w, e2@w))
这是一个例子:
setClass("yyy", representation(v="numeric"))
setMethod("+", signature(e1 = "yyy", e2 = "yyy"), function (e1, e2) e1@v + e2@v)
setMethod("+", signature(e1 = "yyy", e2 = "numeric"), function (e1, e2) e1@v + e2)
那么,
> y1 <- new("yyy", v = 1)
> y2 <- new("yyy", v = 2)
>
> y1 + y2
[1] 3
> y1 + 3
[1] 4
【讨论】: