Re: [Rd] group generics

From: Ross Boylan <>
Date: Mon, 30 Nov 2009 14:57:08 -0800

Hash: SHA1

Martin Morgan wrote:
> Hi Ross --
> Ross Boylan <> writes:

>> I have classes A and B, where B contains A.  In the implementation of
>> the group generic for B I would like to use the corresponding group
>> generic for A.  Is there a way to do that?

>> setMethod("Arith", signature(e1="numeric", e2="B"), function(e1, e2) {
>> 	# the next line does not work right
>>   v <- selectMethod("callGeneric", signature=c("numeric", "A"))(e1, e2)

> v <- callGeneric(e1, as(e2, "A"))
> or probably
> v <- callNextMethod(e1, e2)
> Martin

A different error this time, one that looks a lot like the report from on 2007-12-24 concerning callNextMethod:, except this is with

HOWEVER, the problem is erratic; when I started from scratch and took this code into a workspace and executed the commands, they worked as expected. I had various false starts and revisions, as well as the real code on which the example is based, when the error occurred. I tried taking in the real code (which defines generics with Arith from my actual classes, and which also fails as below), and the example still worked.

My revised code:



setMethod("Arith", signature(e1="numeric", e2="A"), function(e1, e2) {   new("A", xa=callGeneric(e1, e2_at_xa))




setMethod("Arith", signature(e1="numeric", e2="B"), function(e1, e2) {   new("B", xb=e1*e2_at_xb, callNextMethod()) }

> options(error=recover)
> tb <- new("B", xb=1:3, new("A", xa=10))
> 3*tb

Error in get(fname, envir = envir) : object '.nextMethod' not found

Enter a frame number, or 0 to exit

  1. 3 * tb
  2. 3 * tb
  3. test.R#16: new("B", xb = e1 * e2_at_xb, callNextMethod())
  4. initialize(value, ...)
  5. initialize(value, ...)
  6. callNextMethod()
  7. .nextMethod(e1 = e1, e2 = e2)
  8. test.R#6: new("A", xa = callGeneric(e1, e2_at_xa))
  9. initialize(value, ...)
  10. initialize(value, ...)
  11. callGeneric(e1, e2_at_xa)
  12. get(fname, envir = envir)

Selection: 0

The callGeneric in frame 11 is trying to get the primitive for multiplying numeric times numeric. Quoting from Pope's analysis: [The primitive...]
> does not get the various "magic" variables such as .Generic, .Method,
> etc. defined in its frame. Thus, callGeneric() fails when, failing to
> find ".Generic" then takes the function symbol for the call (which
> callNextMethod() has constructed to be ".nextMethod") and attempts to
> look it up, which of course also fails, leading to the resulting error
> seen above.

I'm baffled, and hoping someone on the list has an idea. I'm running R 2.10 under ESS (in particular, I use c-c c-l in the code file to read in the code) on XP.
Version: GnuPG v1.4.9 (MingW32)
Comment: Using GnuPG with Mozilla -

iEYEARECAAYFAksUTcQACgkQTEwcvZWfjMgEdwCfYt/bmsXG76rq3BpbByBYNjLY ubsAoKnBnBMbd+OlBL2YOg3vWslL35Zg
-----END PGP SIGNATURE----- mailing list Received on Mon 30 Nov 2009 - 22:58:38 GMT

This archive was generated by hypermail 2.2.0 : Thu 03 Dec 2009 - 21:51:00 GMT