以函数为例names
:这是 R 中的原始函数。对于原始函数,会创建隐式 S4 泛型,因此可以为该函数构造 S4 方法。
采用如下定义的 S4 类:
setClass("aClass",
representation=list(
values = "character",
id = "numeric"
),
prototype=list(
values = character(0),
id = numeric(0)),
validity=function(object){
length(object@values)==length(object@id)
}
)
现在我想创建一个函数来提取已排序或未排序的名称。我想使用该函数来做到这一点,names
以避免必须创建一个新函数getNames()
或其他任何东西,因为这不太直观。
下面给出了需要做什么的想法:
setMethod("names",signature="aClass",
function(x,ordered=TRUE){
if(ordered)
x@values[x@id]
else
x@values
}
这不起作用,因为names
它是原始函数,并且ordered
不是隐式泛型的参数。
如何在以下条件下进行这项工作:
- 该
names
函数应保持所有其他对象的原始行为,包括来自其他包的对象。 - 代码应该可以在包中使用
- 该代码应该可以被例如 Bioconductor 设定的高标准所接受。