[Rd] is(x, "parent") returns FALSE when class(x) is c("child", "parent") (PR#10549)
Tim Hesterberg
timh at insightful.com
Mon Jan 7 20:25:49 CET 2008
In S-PLUS, is() does catch parent S3 classes. It does not
require a setOldClass definition to do so. I would prefer that
R work the same way, to make porting code easier.
I use is() in S-PLUS for both S3 and S4 classes because it is faster
than inherits(). I use inherits() only for testing a vector of
classes, rather than a single class.
To suggest that S3 has no class inheritance seems odd.
We use inheritance of S3 classes all the time - "ordered" inheriting
from "factor", many classes inheriting from "data.frame", etc.
I see no problem in having inheritance without class definitions.
>>>>>> "TimH" == timh <timh at insightful.com>
>>>>>> on Sat, 5 Jan 2008 02:05:08 +0100 (CET) writes:
>
> TimH> is() does not catch parent S3 classes:
>
> >> library(splines)
> >> temp <- bs(1:99, df=5)
> >> class(temp)
> TimH> [1] "bs" "basis"
> >> is(temp, "basis")
> TimH> [1] FALSE
>
> TimH> In contrast, is() does catch parent S4 classes:
>...
>
>Yes, that's all correct, but where's the bug?
>
>S3 has *NO* class definitions, so how can there be class
>inheritance?
>There's many reasons to go from S3 to S4, and the lack of class
>definitions in S3 is an important one...
>
>Now, still being curious: Are you implicitly saying that in S-plus,
>is() behaves differently, namely
>``as if S3 classes would exist?'' (:-)
More information about the R-devel
mailing list