为了让你开始,我将举一个S3
类的例子:
# create an S3 class using setClass:
setClass("S3_class", representation("list"))
# create an object of S3_class
S3_obj <- new("S3_class", list(x=sample(10), y=sample(10)))
现在,您可以对内部函数进行函数重载,例如,length
将函数作为(您也可以operator-overload
)作用于您的类:
length.S3_class <- function(x) sapply(x, length)
# which allows you to do:
length(S3_obj)
# x y
# 10 10
或者,您可以使用任何名称拥有自己的函数,您可以在其中检查对象是否属于类S3_class
并执行某些操作:
len <- function(x) {
if (class(x) != "S3_class") {
stop("object not of class S3_class")
}
sapply(x, length)
}
> len(S3_obj)
# x y
# 10 10
> len(1:10)
# Error in len(1:10) : object not of class S3_class
解释 S4(如 S3)有点困难,因为有很多术语和事情要知道(它们并不难,只是不同)。我建议您浏览这些评论下提供的链接(以及 S3,因为我在这里的目的是向您展示它是如何完成的示例)。