R 默认S4方法的习惯用法?

R 默认S4方法的习惯用法?,r,methods,s4,R,Methods,S4,是否有为S4泛型编写回退方法的商定方式?我的意思是,如果没有匹配的签名,您是否编写了一个函数作为默认方法来抛出一条解释有效签名的message()?您使用什么样的返回值?还是你犯了一个错误?或者您什么也不做,让R抛出通常的错误“找不到函数的继承方法(…)” 有什么建议吗?如果您可以编写一个泛型,它可能适用于各种可能的类,那么这样做是很常见的。例如,terms的(S3)默认方法尝试在其第一个参数中查找$terms组件(或属性-请注意,这包括参数是具有@terms插槽的S4对象时的情况): func

是否有为S4泛型编写回退方法的商定方式?我的意思是,如果没有匹配的签名,您是否编写了一个函数作为默认方法来抛出一条解释有效签名的
message()
?您使用什么样的返回值?还是你犯了一个错误?或者您什么也不做,让R抛出通常的错误
“找不到函数的继承方法(…)”


有什么建议吗?

如果您可以编写一个泛型,它可能适用于各种可能的类,那么这样做是很常见的。例如,
terms
的(S3)默认方法尝试在其第一个参数中查找
$terms
组件(或属性-请注意,这包括参数是具有
@terms
插槽的S4对象时的情况):

function (x, ...) 
{
    v <- x$terms
    if (is.null(v)) {
        v <- attr(x, "terms")
        if (is.null(v)) 
            stop("no terms component nor attribute")
    }
    v
}
函数(x,…)
{

是的,有一个约定的方法,这取决于一个好的默认函数是否已经作为非泛型函数存在

1.如果已经有一个非泛型函数可以作为默认函数 只需将其设置为通用:

setGeneric('function_name')
2.如果还没有非通用的默认函数
  • 定义一个新的泛型

    setGeneric(
        'function_name',
        function (object) {
            standardGeneric('function_name')
        }
    )
    
  • 添加带有catch all参数的默认实现

    setMethod(
        'function_name',
        signature(object = 'ANY'),
        function (object) {
            …
        }
    )
    

  • 您的回答(部分)解释了如何对S3执行此操作。但是S4的过程非常不同。哦,您实际上想知道如何编写这样一个泛型函数?我以为您刚刚完成了推荐实践。这些泛型恰好是S3,但没有理由不可能是S4,并且该论点仍然成立。