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 | |因子| |日期)