R 多类通用S3函数
我有这样一个通用函数:R 多类通用S3函数,r,R,我有这样一个通用函数: convert <- function(x) UseMethod("simplifyResultConvert") convert.default <- function(x) { x } convert.POSIXct <- function(x) { as.character(x) } convert.factor <- function(x) { as.character(x) } convert.Date <- f
convert <- function(x) UseMethod("simplifyResultConvert")
convert.default <- function(x) {
x
}
convert.POSIXct <- function(x) {
as.character(x)
}
convert.factor <- function(x) {
as.character(x)
}
convert.Date <- function(x) {
as.character(x)
}
convert您可以将类的测试放在默认方法中,例如:
convert.default <- function(x) {
if (inherits(x, "POSIXct") ||
inherits(x, "factor") ||
inherits(x, "Date"))
as.character(x)
else
x
}
您可以将类的测试放在默认方法中,例如:
convert.default <- function(x) {
if (inherits(x, "POSIXct") ||
inherits(x, "factor") ||
inherits(x, "Date"))
as.character(x)
else
x
}
这样写:
convert.default <- function(x) x
convert.Date <-
convert.factor <-
convert.POSIXct <- function(x) as.character(x)
convert.default这样写:
convert.default <- function(x) x
convert.Date <-
convert.factor <-
convert.POSIXct <- function(x) as.character(x)
convert.default由于S3中没有超类,这在S3中是不可能的。但是,您可以通过S4轻松实现这一点,S4允许定义超类:
setGeneric("convert", function(object) {
standardGeneric("convert")
})
setClassUnion("fooClasses", members = c("factor", "Date", "POSIXt")) #POSIXt is a super-class
setMethod("convert", signature(object = "fooClasses"), function(object) {
as.character(object)
})
class(convert(as.Date("2010-10-10")))
#[1] "character"
class(convert(as.POSIXct("2010-10-10")))
#[1] "character"
由于S3中没有超类,这在S3中是不可能的。但是,您可以通过S4轻松实现这一点,S4允许定义超类:
setGeneric("convert", function(object) {
standardGeneric("convert")
})
setClassUnion("fooClasses", members = c("factor", "Date", "POSIXt")) #POSIXt is a super-class
setMethod("convert", signature(object = "fooClasses"), function(object) {
as.character(object)
})
class(convert(as.Date("2010-10-10")))
#[1] "character"
class(convert(as.POSIXct("2010-10-10")))
#[1] "character"
你的问题令人困惑。现在,我将其解释为您希望为几个类使用一个(非默认)方法。如果没有超级类,S3就不可能做到这一点。是的,这就是我想要的。例如:convert.(POSIXct | | factor | | | date)您的问题令人困惑。现在,我将其解释为您希望为几个类使用一个(非默认)方法。如果没有超级类,S3就不可能做到这一点。是的,这就是我想要的。例如:convert.(POSIXct | |因子| |日期)