From timh at insightful.com  Mon Jan  7 20:30:23 2008
From: timh at insightful.com (timh at insightful.com)
Date: Mon,  7 Jan 2008 20:30:23 +0100 (CET)
Subject: [Rd] is(x, "parent") returns FALSE when class(x) is c("child",
	"parent") (PR#10549)
Message-ID: <20080107193023.E8625282EFF7@mail.pubhealth.ku.dk>

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?'' (:-)



[Rd] is(x, "parent") returns FALSE when class(x) is c("child", "parent") (PR#10549)
timh at insightful.com