[Rd] S4 method setClass prototype definition question
Matthias Burger
matthias.burger at epigenomics.com
Thu Jul 3 17:26:22 MEST 2003
John Chambers wrote:
> I think you didn't type what you meant to type (see below.)
>
> Sourcing in your class descriptions with 1.7.1, I get what you expected.
>
You are of course correct! Thanks for pointing this out. I should have looked
more carefully!
[...]
Still the answer to the question on what is the recommended programming style
for setClass definitions is not clear to me. For what purpose or in which
circumstances should one use the 'contains' argument?
See the example code below. What side effects has it or what difference is there
between the two versions (if any).
I would be very happy for any help gaining a clearer understanding of that
mechanism.
Regards,
Matthias
setClass("IDataType",
representation("VIRTUAL",
valid="logical"),
validity=NULL,
sealed=TRUE)
## define the parent class dependency in representation
setClass("Annotation1",
representation ("IDataType",
x="vector",
y="vector",
catId="integer",
isResolved="logical",
resolve="logical"),
prototype(isResolved=FALSE,
catId=as.integer(-1),
valid=TRUE),
validity=NULL,
sealed=TRUE)
## define the dependency via a contains statement
setClass("Annotation2",
representation (x="vector",
y="vector",
catId="integer",
isResolved="logical",
resolve="logical"),
prototype(isResolved=FALSE,
catId=as.integer(-1),
valid=TRUE),
contains=as.character("IDataType"),
validity=NULL,
sealed=TRUE)
> an1 <- new("Annotation1")
> an1
An object of class "Annotation1"
Slot "x":
NULL
Slot "y":
NULL
Slot "catId":
[1] -1
Slot "isResolved":
[1] FALSE
Slot "resolve":
logical(0)
Slot "valid":
[1] TRUE
> an2 <- new("Annotation2")
> an2
An object of class "Annotation2"
Slot "x":
NULL
Slot "y":
NULL
Slot "catId":
[1] -1
Slot "isResolved":
[1] FALSE
Slot "resolve":
logical(0)
Slot "valid":
[1] TRUE
> all.equal(an1,an2)
[1] "Attributes: < Component 2: 1 string mismatches >"
So I conclude that appart from the class name those two objects are the same,
and accordingly they will behave the same in all situations, won't they?
--
Matthias Burger
Bioinformatics R&D
Epigenomics AG www.epigenomics.com
Kleine Pr?sidentenstra?e 1 fax: +49-30-24345-555
10178 Berlin Germany phone: +49-30-24345-0
More information about the R-devel
mailing list