在S4类的插槽上调度S4方法

时间:2013-05-07 11:03:57

标签: r methods dispatch s4

我想创建一个S4方法' myMethod'不仅会调度函数的第一个参数的类,还会调度此类的一个插槽的值。

例如

myObject的:
@ slot1中=" A"
@ ...

我希望myMethod(myObject)为slot1 =" A"返回不同的内容。和slot2 =" B"。

我可以避免硬编码“如果'在' myObject'?

的代码中

1 个答案:

答案 0 :(得分:4)

一个并不完全不常见的模式是使用小类来提供多个调度

setClass("Base")
A = setClass("A", contains="Base")
B = setClass("B", contains="Base")
My = setClass("My", representation(slot1="Base"))

setGeneric("do", function(x, y, ...) standardGeneric("do"))
setMethod("do", "My", function(x, y, ...) do(x, x@slot1, ...))

然后处理重新发送的方法

setMethod("do", c("My", "A"), function(x, y, ...) "My-A")
setMethod("do", c("My", "B"), function(x, y, ...) "My-B")

行动中:

>     My = setClass("My", representation(slot1="Base"))
>     a = My(slot1=A())
>     b = My(slot1=B())
>     do(a)
[1] "My-A"
>     do(b)
[1] "My-B"