如果一个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"
有什么线索可以说明为什么会出现这种情况,最重要的是,如何绕过此问题?