[Rd] confused by inheritance...

John Chambers jmc at r-project.org
Tue May 23 15:12:24 CEST 2006

This may be related to the problems with "greedy" search for inherited 
methods discussed previously on this list (or may not, it's a bit 

In any case, the likely fix will be a substantial cleaning up of generic 
functions hoped for in the next release.

Meanwhile, "Keep it simple" is the best advice (and a good idea 
anyway).  If you remove the irrelevant z= part of the signatures, the 
anomalous result goes away.

By the way, the getMethod() in your example tells us nothing, since it 
does not use inheritance.  See its documentation.  If you use 
selectMethod() you see the same result as the method dispatch.

Peter Ruckdeschel wrote:

>Hi r-devels,
>I am stuck in some S4 inheritance problem:
>    setGeneric("foo", function(x,y,z, ...) standardGeneric("foo"))
>setMethod("foo",signature(x = "A", y = "missing", z = "missing"),
>    function(x)x at a )
>setMethod("foo",signature(x = "A1", y = "missing", z = "missing"),
>    function(x)x at b )
>setMethod("foo",signature(x = "A2", y = "missing", z = "missing"),
>    function(x)x at c )
>setMethod("foo",signature(x = "A1", y = "numeric", z = "missing"),
>    function(x,y)c(x at b,y) )
>x2 <- new("A2", a=1, b=2, c=3)
>foo(x2)      ## gives 3 as it should
>foo(x2,y=2)  ## casts to "A1" and gives (2,2) as it should
>foo(x2)      ## now gives 2 as if x2 were permanently cast to "A1"
>## However:
>x2  ## of class "A2" as it should
>getMethod("foo",signature(x = "A2", y = "missing", z = "missing"))
>    ## function(x)x at c
>### What has happened in the dispatching mechanism between
>## in the line           foo(x2,y=2)             ?
>I would appreciate any help.
>Thanks for listening
>R-devel at r-project.org mailing list

More information about the R-devel mailing list