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