Jor*_*eys 6 generics primitive r names s4
接受函数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函数应保留其所有其他对象的原始行为,包括来自其他包的对象.通用版本可用
> getGeneric("names")
standardGeneric for "names" defined from package "base"
function (x) 
standardGeneric("names", .Primitive("names"))
<environment: 0x459c9c0>
Methods may be defined for arguments: x
Use  showMethods("names")  for currently available ones.
所以从签名中你可以看到简短的答案是你不能添加参数.你绝对不想创建自己的功能names.黑客会使用包全局变量,getOption("pkg_names_ordered")但我不会自己参与该解决方案.
在某些方面,所提出的合同names没有说明任何关于订单的信息(例如,名称和数字缺陷通常用于子集;是有序名称的数字索引,还是无序名称?),所以你真的在提议无论如何,一个新的通用.