我在自己的包中使用zoo
类。我想设置一个类型为zoo
的通用方法:
setMethod(
"doWork",
signature = c("zoo"),
definition = function(x) {
# Do work...
})
然而,这给了我错误:
在带有签名'" zoo"'的'dowork'方法中:没有“zoo”类的定义
如何设置签名以使其引用zoo::zoo
?
答案 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!!!"