r - 为原始函数的隐式 S4 泛型添加额外参数

标签 r generics primitive 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函数应该为所有其他对象保持其原始行为,包括来自其他包的对象。
  • 该代码应该可以用于包
  • 该代码应符合 Bioconductor 等制定的高标准。
  • 最佳答案

    泛型可作为

    > 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 规定的契约(Contract)没有说明顺序(例如,名称和数字索引通常用于子集;是有序名称的数字索引还是无序名称?),因此您实际上是在提议一个新的泛型。

    关于r - 为原始函数的隐式 S4 泛型添加额外参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18445422/

    相关文章:

    r - 将新变量添加到数据框中的特定位置

    regex - 从字符串向量中删除方括号

    c++ - 为 map<T1,T2> 迭代器创建模板函数

    r - 在 R 中使用 igraph 创建正则图或邻接矩阵?

    r - 用R中的条件按组计算均值

    javascript - 如何在 typescript 中编写带有 value 或 value[] 参数的泛型函数作为两个参数

    java - org.json.simple.JSONArray 设计的不好吗?

    Java - PHP 数字类型混淆 (9966006699)

    java - Java中原语的同时更新

    java - 在原始类型和引用类型之间如何使用“==”相等运算符?