我有一个像这样的通用函数:
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)
}
是否可以通过为类型创建一个通用类型来简化它:POSIXct,日期和因子?
为了清楚起见:我需要类似的东西:
convert.(POSIXct || factor || date) <- funciton(x) {as.character(x)}
答案 0 :(得分:2)
您可以使用默认方法对类进行测试,例如:
convert.default <- function(x) {
if (inherits(x, "POSIXct") ||
inherits(x, "factor") ||
inherits(x, "Date"))
as.character(x)
else
x
}
这与您想要的不完全相同,因为对象可以具有类c("POSIXct", "other")
,并且如果设置了convert.other()
方法,则会调用该方法而不是默认方法。
如果您确实想要所要求的行为,则需要这三个功能,但是您可以使用节省一些打字
convert.Date <- convert.factor <- convert.POSIXct <- function(x) {
as.character(x)
}
答案 1 :(得分:2)
这样写:
convert.default <- function(x) x
convert.Date <-
convert.factor <-
convert.POSIXct <- function(x) as.character(x)
答案 2 :(得分:1)
由于S3中没有超类,所以S3无法实现。但是,您可以使用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"