-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Martin Morgan wrote: > Hi Ross -- > > Ross Boylan <r...@biostat.ucsf.edu> 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 stephen.p...@ubs.com on 2007-12-24 concerning callNextMethod:, except this is with callGeneric. 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: setClass("A", representation=representation(xa="numeric") ) setMethod("Arith", signature(e1="numeric", e2="A"), function(e1, e2) { new("A", xa=callGeneric(e1, e...@xa)) } ) setClass("B", representation=representation(xb="numeric"), contains=c("A") ) setMethod("Arith", signature(e1="numeric", e2="B"), function(e1, e2) { new("B", xb=e1...@xb, callNextMethod()) } ) Results: > 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 * e...@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, e...@xa)) 9: initialize(value, ...) 10: initialize(value, ...) 11: callGeneric(e1, e...@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. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (MingW32) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAksUTcQACgkQTEwcvZWfjMgEdwCfYt/bmsXG76rq3BpbByBYNjLY ubsAoKnBnBMbd+OlBL2YOg3vWslL35Zg =D58x -----END PGP SIGNATURE----- ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel