在R中,如何在另一个包中为类设置泛型方法?

时间:2015-05-14 15:16:10

标签: r generics methods packages

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

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

        # Do work... 
    })

然而,这给了我错误:

  

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

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

1 个答案:

答案 0 :(得分:4)

这是因为zoo包中的zoo类不是正式的S4类。为了将它与S4方法一起使用,您可以使用setOldClass函数,该函数将S3类设置为正式定义的类。一旦你这样做,你应该能够使用这个方法的类。使用以下文件开始一个新的包(我只是打电话给'测试')(请注意使用roxygen2 )。

methods.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!!!"