S4 ジェネリック関数の名前付き引数のみがメソッドで定義されている場合、substitute()
期待どおりに動作します。
> setGeneric("fS4", function(x, ...) standardGeneric("fS4"))
> setMethod("fS4", signature("numeric"),
+ function(x, ...) deparse(substitute(x))
+ )
[1] "fS4"
> fS4(iris[,1])
[1] "iris[, 1]"
ただし、メソッドの定義に追加の名前付き引数を追加すると、substitute()
渡された引数が正しく返されなくなります。
> setMethod("fS4", signature("numeric"),
+ function(x, y, ...) deparse(substitute(x))
+ )
[1] "fS4"
> fS4(iris[,1])
[1] "x"
なぜこれが起こるのか、そして最も重要なこととして、それをどのように回避できるのかについての手がかりはありますか?