Dear Martin and Seth,

Thanks a million for explanations and suggestions. I find myself still in the
process of learning S4 system. Can you possibly suggest some material that I
could use in this "process"?

Anything apart from "Programming with data" book? I also know the notes written
by John Chambers and I also have Fritz Leisch's slides from the first UseR!,
all three available on the Web. Do you have any suggestions in that matter?

Thanks a lot in advance!

Best, Michal

> Martin Morgan <mtmorgan at fhcrc.org> writes:
> 
> > Hi Michal --
> >
> > Add validObject to your initialize method:
> 
> Actually, a call to valid object is part of the default initialization
> method which has been masked.  A different solution, which might have
> some other benefits is to delegate back to the default method using
> callNextMethod.  So you could do:
> 
> setMethod("initialize", "someclass",
> function(.Object, v=numeric(0), l=character(0))
> {
>     # strip the vector names
> 
>     cv <- v
>     cl <- l
>     names(cv) <- NULL
>     names(cl) <- NULL
>     callNextMethod(.Object=.Object, v=cv, l=cl)
> } )
> 
> 
> > Here are two interpretations of this. (1) using 'initialize' means
> > that you are taking control of the initialization process, and hence
> > know when you need to call validObject.
> 
> Yes.  Anytime you specialize a method you must take responsibility for
> any less specific methods.  In this case, the default 'initialize'
> does object validation.  So if you want validation, you either need to
> do it directly or invoke the default method.
> 
> > (2) Responsibility for object
> > validity is ambiguous -- does it belong with 'new', 'initialize', or a
> > 'constructor' that the programmer might write? This is particularly
> > problematic with R's copy semantics, where creating transiently
> > invalid objects seems to be almost necessary (e.g., callNextMethod()
> > in 'initialize' might initialize the inherited slots of the object,
> > but the object itself is of the derived class and could well be
> > invalid 'invalid' after the base class has finished with initialize).
> 
> This is a good point.  It suggests that, at least, one must initialize
> all non-inherited slots to valid values _before_ calling the next
> method.
> 
> + seth



:
::
::: Note that my e-mail address has changed to m.j.bojanowski at uu dot nl
::: Please update you address books accordingly. Thank you!
::
:


____________________________________
Michal Bojanowski
ICS / Department of Sociology
Utrecht University
Heidelberglaan 2; 3584 CS Utrecht
The Netherlands
m.j.bojanowski at uu dot nl
http://www.fss.uu.nl/soc/bojanowski/


	[[alternative HTML version deleted]]

