関数の最初の引数のクラスだけでなく、このクラスのスロットの 1 つの値にもディスパッチする S4 メソッド 'myMethod' を作成したいと思います。
例えば
myObject:
@slot1="A"
@...
myMethod(myObject) が slot1="A" と slot2="B" に対して異なるものを返すようにしたいと思います。
「myObject」のコードで「if」をハードコーディングするのを避けることはできますか?
完全に珍しいわけではないパターンは、小さなクラスを使用して複数のディスパッチを提供することです
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"