【问题标题】:In R, how can I set a generic method on a class from another package?在 R 中,如何在另一个包中的类上设置泛型方法?
【发布时间】:2015-05-14 15:16:09
【问题描述】:

我在自己的包中使用zoo 类。我想设置一个类型为zoo的泛型方法:

setMethod(
    "doWork", 
    signature = c("zoo"), 
    definition = function(x) {

        # Do work... 
    })

但是,这给了我错误:

在带有签名“zoo”的“dowork”方法中:没有定义类“zoo”

我应该如何设置签名以使其引用zoo::zoo

【问题讨论】:

    标签: r generics methods packages


    【解决方案1】:

    这是因为 zoo 包中的 zoo 类不是正式的 S4 类。为了将它与 S4 方法一起使用,您可以使用 setOldClass 函数,它将 S3 类设置为正式定义的类。一旦你这样做了,你应该能够使用你希望的方法来使用这个类。使用以下文件(请注意使用 roxygen2)启动一个新包(我称之为“test”)。

    方法.R

    #' @import zoo
    setOldClass("zoo")
    
    setGeneric("doWork", function(x){
        standardGeneric("doWork")
    })
    
    #' @export
    setMethod(
        "doWork", 
        signature = c("zoo"), 
        definition = function(x) {
    
            print("IT WORKS!!!")
        }
    )
    

    测试功能

    library(test) # if not already loaded
    library(zoo)
    x.Date <- as.Date("2003-02-01") + c(1, 3, 7, 9, 14) - 1
    x <- zoo(rnorm(5), x.Date)
    doWork(x)
    [1] "IT WORKS!!!"
    

    【讨论】:

      猜你喜欢
      • 2015-09-27
      • 2014-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多