gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:59:52 26 4
gpt4 key购买 nike

取函数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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com