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