非ジェネリック関数をハイジャックし、それを(S3)ジェネリックにして、元のバージョンをデフォルトバージョンに設定することができます。例えば:
## make an S3 generic for sd
sd <- function(x, ...) UseMethod("sd")
## take the usual definition of sd,
## and set it to be the default method
sd.default <- stats::sd
## create a method for our class "foo"
sd.foo = function(x, ...) print("Hi")
これがパッケージに含まれている場合の最後のステップは、パッケージチェックに合格できるようにするための...
引数を追加することです。sd.default
formals(sd.default) <- c(formals(sd.default), alist(... = ))
与える:
> args(sd.default)
function (x, na.rm = FALSE, ...)
NULL
> args(stats::sd)
function (x, na.rm = FALSE)
NULL
これにより、目的の動作が得られます。
> bar <- 1:10
> sd(bar)
[1] 3.027650
> class(bar) <- "foo"
> sd(bar)
[1] "Hi"
これは、R拡張機能の作成マニュアルのセクション7.1に記載されています。