在 R 中,如何在另一个包的 class 上设置泛型方法?
In R, how can I set a generic method on a class from another package?
我在自己的包中使用 zoo
class。我想设置一个类型为 zoo
的通用方法:
setMethod(
"doWork",
signature = c("zoo"),
definition = function(x) {
# Do work...
})
但是,这给了我错误:
in method for ‘dowork’ with signature ‘"zoo"’: no definition for class “zoo”
我应该如何设置签名使其指向zoo::zoo
?
这是因为 zoo
包中的 zoo class 不是正式的 S4 class。为了将它与 S4 方法一起使用,您可以使用 setOldClass
函数,它将 S3 class 设置为正式定义的 class。执行此操作后,您应该可以根据需要使用这些方法来使用 class。使用以下文件启动一个新包(我只是称之为 'test')(请注意 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!!!"
我在自己的包中使用 zoo
class。我想设置一个类型为 zoo
的通用方法:
setMethod(
"doWork",
signature = c("zoo"),
definition = function(x) {
# Do work...
})
但是,这给了我错误:
in method for ‘dowork’ with signature ‘"zoo"’: no definition for class “zoo”
我应该如何设置签名使其指向zoo::zoo
?
这是因为 zoo
包中的 zoo class 不是正式的 S4 class。为了将它与 S4 方法一起使用,您可以使用 setOldClass
函数,它将 S3 class 设置为正式定义的 class。执行此操作后,您应该可以根据需要使用这些方法来使用 class。使用以下文件启动一个新包(我只是称之为 'test')(请注意 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!!!"