【问题标题】: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!!!"