S4 method inheritance
On Tue, May 24, 2005 at 07:07:07AM -0400, Duncan Murdoch wrote:
Ross Boylan wrote:
On Mon, 2005-05-23 at 14:41 -0700, Ross Boylan wrote: ....
Finally, I'm a bit concerned that one article mentioned that S4 inheritance, in practice, is used mostly for data, not methods (Thomas Lumley, R News 4(1), June 2004: p. 36). Am I going down a road I shouldn't travel?
Hmm, maybe I just found out. If B is an S4 subclass of A (aka extends A), how does B's method foo invoke A's foo?
Your question doesn't make sense in S4. In S4, classes don't have methods, generics have methods. There's no such thing as "B's method" or "A's method".
Oops, I keep taking the references to "objects" too literally. Thanks.
You might get what you want with foo(as(bObject, "A")) if bObject is an instance of class B.
The question assumes that A's foo was defined as an in place function,
so there's no (obvious) named object for it, i.e,
setMethod("A", signature(blah="numeric"), function(x) something)
There's my confusion: the first argument should be the name of the generic, not the class.
I don't know what you mean by "in place function", but I hope my answer helps anyway.
Just for clarification, "in place function" was in contrast to a
function defined elsewhere with an explicit name, e.g.,
fforA<-function(x) something
setMethod("foo", signature(blah="numeric"), fforA)
In that case I could just refer to fforA directly. (Trying to avoid
the S3ish f.A).
Is sounds as if the use of as() or callNextMethod() will get me what I
want. And the docs seem clear that callNextMethod() returns control
(and a value) to the calling function.
Thanks to everyone for their help.