1

私はRで以下を定義しました:

plotWaterfall         <- function(x, ...) UseMethod("plotWaterfall")
plotWaterfall.default <- function(x, ...) {print("Default method does nothing")}
plotWaterfall.vector  <- function(x, ...) {print("Vector method does something")}

次の例をテストすると、次のようになります。

x<-c(1,2,3)
plotWaterfall(x)

「デフォルトのメソッドは何もしません」と表示され、S3フレームワークがベクターメソッドではなくデフォルトのメソッドと一致することを示します。それはなぜですか?

4

1 に答える 1

2

これは、ベクトルのクラスがであるためですnumeric。したがって、これを行う必要があります。

plotWaterfall.numeric  <- function(x, ...) {print("Numeric vector")}

plotWaterfall(x)
[1] "Numeric vector"

class()次の関数を使用して、オブジェクトのクラスを決定することができます。

class(x)
[1] "numeric"

この動作は、次のヘルプで説明されています?UseMethod

メソッドのディスパッチは、ジェネリック関数の最初の引数のクラス、またはUseMethodの引数として提供されたオブジェクトのクラスに基づいて行われます。

于 2012-12-07T10:14:42.813 に答える