Here,最佳答案描述了在S3和S4对象上进行方法调度的好方法。但是,只有当两种方法具有相同的签名时,这种方式才有效。
有没有办法为median
创建一个具有不同签名的S4方法?
例如,以下内容不起作用:
setGeneric("median")
median.Foo <- function(arg1, arg2, ...){}
setMethod("median", "Foo", median.Foo)
安装libary时,会出现错误,指出缺少正式参数x
和na.rm
,它们是原始中值函数的参数。
我想避开作者帖子顶部的解决方案。
答案 0 :(得分:1)
setGeneric("median")
使用与stats :: median
> 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是区分大小写的...但这也是一个坏主意。