创建一个名为`Median`的S4方法

时间:2013-09-26 14:28:50

标签: r s4 r-s3

Here,最佳答案描述了在S3和S4对象上进行方法调度的好方法。但是,只有当两种方法具有相同的签名时,这种方式才有效。

有没有办法为median创建一个具有不同签名的S4方法?

例如,以下内容不起作用:

setGeneric("median")
median.Foo <- function(arg1, arg2, ...){}
setMethod("median", "Foo", median.Foo)

安装libary时,会出现错误,指出缺少正式参数xna.rm,它们是原始中值函数的参数。

我想避开作者帖子顶部的解决方案。

1 个答案:

答案 0 :(得分:1)

setGeneric("median")使用与stats :: median

相同的签名创建一个S4泛型
> 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是区分大小写的...但这也是一个坏主意。