3

ここで、上位の回答は、S3 オブジェクトと S4 オブジェクトの両方でメソッド ディスパッチを行う良い方法を説明しています。ただし、この方法は、両方のメソッドの署名が同じ場合にのみ機能します。

median別の署名でS4 メソッドを作成する方法はありますか?

たとえば、次は機能しません。

setGeneric("median")
median.Foo <- function(arg1, arg2, ...){}
setMethod("median", "Foo", median.Foo)

ライブラリのインストール時に、元の中央値関数の引数である仮引数と が欠落しているというエラーが表示さxれます。na.rm

著者の投稿の上部にある解決策は避けたいと思います。

4

1 に答える 1

1

setGeneric("median")stats::median と同じ署名を持つ S4 ジェネリックを作成します

> stats::median
function (x, na.rm = FALSE) 
UseMethod("median")
<environment: namespace:stats>

メソッドを書くことができるように

median.Foo <- function(x, na.rm=FALSE) {}
setMethod(median, "Foo", median.Foo)

パッケージチェックメッセージは

setGeneric("median", function(arg1, arg2, ...) standardGeneric("median"))

そして、あなたが書いているように。しかし、S3 メソッドが関数によってマスクされているため、おそらくそれは悪い考えです。

> median(1:5)
Error in (function (classes, fdef, mtable)  : 
  unable to find an inherited method for function 'median' for signature '"integer"'

デフォルトの引数または変更された関数名にこだわっていると思います。あなたの投稿のタイトルにはMedian、R は大文字と小文字が区別されると書かれていますが、それも悪い考えです。

于 2013-09-26T20:12:44.077 に答える