Skip to content

confused by inheritance...

1 message · Peter Ruckdeschel

#
Thank you very much for your explanation --- at least this is not a silly
fault from our side!
Well, as you might have guessed, the z= part is only irrelevant in
the code sniplet I have posted to r-devel as an example...

In our application, 'foo' is an expectation function E() which may be called
as follows:

E(x)          ## returns the expectation of a r.v. X distributed
              ## according to distribution x
E(x,fun)      ## returns the expectation of a r.v. fun(X) where X is distributed
              ## according to distribution x
E(x,cond)     ## returns the expectation of a r.v. X given condition 'cond' is
              ## in force and where X is distributed according to distribution x
E(x,fun,cond) ## returns the expectation of a r.v. fun(X) given condition 'cond' is
              ## in force and where X is distributed according to distribution x

Would you have any suggestion how to organize this in a simpler way than
with signatures

"Distribution", "missing", "missing"
"Distribution", "function", "missing"
"Distribution", "missing", "numeric"
"Distribution", "function", "numeric"

respectively?

--------------------------------------------------------------------------------
Yes, but since 'target' and 'defined' are identical---

Signatures:
        x    y         z
target  "A2" "missing" "missing"
defined "A2" "missing" "missing"

---I would have guessed that the dispatching mechanism would
use this method.
...but this would have made me think that somehow
(perhaps by an unintended call to removeMethod())
during the dispatching mechanism, the registration of  my
("A2","missing","missing")-method would have been deleted.

This is not the case, and could be excluded after
having a look at getMethod() --- so at least for me,
getMethod() did provide some information ...

This idea of a registration being deleted may sound silly to you,
but it was my first guess after the following code (in the setup
of my posted example):

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"
setMethod("foo",signature(x = "A2", y = "missing", z = "missing"),
   function(x)x at c )
foo(x2)      ## again gives 3 as it should

Thanks again

Peter

---------------------------------------------------------------------------