我想创建一个S4方法'myMethod‘,它不仅对函数的第一个参数的类进行调度,还对该类的一个槽的值进行调度。
例如
myObject:
@slot1="A“
@...
我希望myMethod(myObject)为slot1="A“和slot2="B”返回一些不同的东西。
我可以避免在'myObject‘的代码中硬编码'if’吗?
发布于 2013-05-07 20:23:22
一种并非完全不常见的模式是使用小类来提供多个分派。
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"https://stackoverflow.com/questions/16417426
复制相似问题