【问题标题】:Creating a new method for a generic from another package in R从 R 中的另一个包为泛型创建新方法
【发布时间】:2014-09-09 22:33:43
【问题描述】:

在 R 中,将泛型的新方法包含在另一个包中的最简单方法是什么?例如,“nlme”包有一个名为“getData”的泛型,其中包含用于“lme”和“nls”类对象的方法。我只想在自己的包中为“lm”类对象添加一个方法。

【问题讨论】:

    标签: r class generics methods package


    【解决方案1】:

    如果您想从nlme 向现有S3 泛型添加另一个方法,例如getData,只需创建一个名为getData.classname 的函数。例如,假设我有一个“foo”类的特殊对象

    z <- structure(5, class="foo")
    

    我只是定义

    getData.foo<-function(x, ...) {
        unclass(x)+5
    }
    

    然后当我打电话时

    library(nlme)
    getData(z)
    #[1] 10
    

    我的自定义函数被调用。这一切都是为了正确命名你的函数。就是这样。

    【讨论】:

    • 知识渊博。我很快就会需要这个。
    • 我的方法如您所描述的那样工作,但在 NAMESPACE roxygen 中将其列为export(as.data.table.xts) 而不是S3method(as.data.table.xts),这是一个问题/不寻常吗?
    • @mkemp6 从我收集到的here 看来,您可能希望在包的NAMESPACE 文件中使用S3method(as.data.table, xts)
    • 哎呀,这就是我的意思。我想知道为什么 roxygen2 在 NAMESPACE 中创建条目为export(...),即使在所需的包中存在泛型
    • @mkemp6 我不确定。如果您真的想知道,我建议您专门针对该问题提出一个新问题。
    猜你喜欢
    • 2015-09-27
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多