S3
S3 对象系统是 R 中非常简单的 OO 系统。
每个对象都有一个 S3 类。它可以通过函数 class
得到(得到?)。
> class(3)
[1] "numeric"
它也可以使用 class
功能设置:
> bicycle <- 2
> class(bicycle) <- 'vehicle'
> class(bicycle)
[1] "vehicle"
它也可以使用 attr
功能设置:
> velocipede <- 2
> attr(velocipede, 'class') <- 'vehicle'
> class(velocipede)
[1] "vehicle"
一个对象可以有很多类:
> class(x = bicycle) <- c('human-powered vehicle', class(x = bicycle))
> class(x = bicycle)
[1] "human-powered vehicle" "vehicle"
使用泛型函数时,R 使用具有可用泛型的类的第一个元素。
例如:
> summary.vehicle <- function(object, ...) {
+ message('this is a vehicle')
+ }
> summary(object = my_bike)
this is a vehicle
但是如果我们现在定义一个 summary.bicycle
:
> summary.bicycle <- function(object, ...) {
+ message('this is a bicycle')
+ }
> summary(object = my_bike)
this is a bicycle