[R] classes and methods
Wacek Kusnierczyk
Waclaw.Marcin.Kusnierczyk at idi.ntnu.no
Fri Mar 20 11:03:17 CET 2009
mtmorgan at fhcrc.org wrote:
>> setClass("foo",representation(x="numeric"))
>
> This creates an *S4* class which HAS A 'slot' x that is of type numeric.
>
>>> setMethod("plot","foo",function(x,y,...)boxplot(x,...))
>>> x <- rnorm(100)
>>> class(x) <- "foo"
>
> uh oh, this is creating an *S3* class that IS A numeric that has been
> given the class name "foo". The S3 class 'foo' and S4 class 'foo' are
> different. Note that you can make anything an S3 class
>
>> z=letters
>> class(z) <- "foo"
>
> because S3 does not have any definition for what a 'foo' class is.
>
>>> plot(x)
>
> this 'works' but in my view should not -- the method is defined for
> the S4 class, not for the S3 class.
>
it seems that a generic can dispatch to s3 method on an s4 object, and
to an s4 method on an s3 object, and also that s4 methods capture, or
shadow, s3 methods:
setClass('foo', representation(x='numeric'))
setMethod('print', 'foo', function(x, ...) print('foo'))
s4 = new('foo', x = 0)
print(s4)
# "foo"
s3 = structure(0, class='foo')
print(s3)
# "foo"
print.foo = function(s3) print('bar')
print(s3)
# "foo"
print(s4)
# "foo"
removeMethod('print', 'foo')
print(s3)
# "bar"
print(s4)
# "bar"
is this intended?
vQ
More information about the R-help
mailing list