Error と周辺の挙動
f <- function(x, n = 1, ...) UseMethod("f")
f.default <- function(x, n, ...) n
f(NULL)
## Error in f.default(NULL): argument "n" is missing, with no default
てっきり f(NULL)
を実行すると,既定で n = 1
だから,
f.default(x = NULL, n = 1)
が呼び出されるとばかり思っていた.
メソッドに渡される引数は明示的に値を与えたものだけらしい.
f(NULL, n = 2)
といった具合にすると,f.default(x = NULL, n = 2)
が呼び出されうまく動く.
f(NULL, 2)
## [1] 2
対策
メソッドにも既定値を設定
f <- function(x, n = 1, ...) UseMethod("f")
f.default <- function(x, n = 1, ...) n
f()
## [1] 1
formals<-
を利用
複数のメソッドに同じ既定値を与えたい場合に便利. コピペを減らせ,後で挙動を変える時は総称関数の既定値を変えるだけで済む.
f <- function(x, n = 1, ...) UseMethod("f")
f.numeric <- function(x, n, ...) n
f.character <- function(x, n, ...) n
formals(f.numeric)$n <- formals(f.character)$n <- formals(f)$n
f(1)
## [1] 1
f("A")
## [1] 1