From Peter.Ruckdeschel at uni-bayreuth.de  Mon May 22 22:26:17 2006
From: Peter.Ruckdeschel at uni-bayreuth.de (Peter Ruckdeschel)
Date: Mon, 22 May 2006 22:26:17 +0200
Subject: [Rd] confused by inheritance...
Message-ID: <44721E69.4070305@uni-bayreuth.de>

Hi r-devels,

I am stuck in some S4 inheritance problem:

setClass("A",representation(a="numeric"))
setClass("A1",representation(b="numeric"),contains="A")
setClass("A2",representation(c="numeric"),contains="A1")

if(!isGeneric("foo")){
    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
Peter



[Rd] confused by inheritance...
Peter Ruckdeschel