class - Inheriting classes or multiply classes in R? -
there appears interesting situation in r s3 objects because not inherits classes.
one can see agnes.object
(result of agnes{cluster}
function ) has 2 different classes.
library( cluster ) example( agnes ) class( agn1 ) [1] "agnes" "twins"
but meantime when read agnes.object
documentation there section inheritance , there there sentence: 'the class "agnes" inherits "twins".'
what think that? inheritance or multiply classes :)?
s3 allows linear hierarchy of classes.
> class(agn1) [1] "agnes" "twins"
says agn1 instance of class agnes, extends (inherits from) twins. here define generics , methods
## s3 generics foo <- function(x) usemethod("foo") bar <- function(x) usemethod("bar") baz <- function(x) usemethod("baz") ## s3 methods -- append '.' , class name foo.twins = function(x) "twins" foo.agnes = function(x) "agnes" bar.twins = function(x) "twins" baz.agnes = function(x) "agnes"
and illustrate inheritance in dispatch (method selection).
> foo(agn1) [1] "agnes" > bar(agn1) [1] "twins" > baz(agn1) [1] "agnes"
the s3 class system in r instance-based, there no formal class definition. class inheritance implied character vector. object class "agnes"
has no parent class, whereas class c("agnes", "twins")
defines linear class hierarchy parent "twins"
(even if there no object anywhere class "twins"
alone!). because there no formal class definition, 2 objects declaring of same class have different structure, e.g.,
structure(list(), class="a") structure(list(x=1, y=2, z=3), class="a")
can both legitimately claim of class "a"!
Comments
Post a Comment