在R中,如何对来自另一个包的类设置泛型方法?

在R中,如何对来自另一个包的类设置泛型方法?,r,generics,methods,packages,R,Generics,Methods,Packages,我在自己的包中使用zoo类。我想设置一个类型为zoo的泛型方法: setMethod( "doWork", signature = c("zoo"), definition = function(x) { # Do work... }) 但是,这给了我一个错误: 签名为“zoo”的“dowork”的方法中:类“zoo”没有定义 我应该如何设置签名,使其引用zoo::zoo?这是因为zoo包中的zoo类不是正式的S4类。为了与S4方法一起使

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

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

        # Do work... 
    })
但是,这给了我一个错误:

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


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

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

方法: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!!!"
库(测试)#如果尚未加载
图书馆(动物园)
x、 日期