>>>>> "RMK" == Rainer M Krug <r.m.k...@gmail.com> >>>>> on Mon, 8 Jun 2009 11:18:17 +0200 writes:
RMK> On Sat, Jun 6, 2009 at 12:14 AM, Martin Morgan<mtmor...@fhcrc.org> wrote: >> Rainer M Krug <r.m.k...@gmail.com> writes: >> >>> Hi >>> >>> I want to create a new generic method, but I end up with an error >>> (evaluation nested too deeply). see the transcript below. >>> The function beginYear.Fun() works, but not beginYear. >>> >>> I have no idea why. >>> >>> Any ideas welcome, >>> >>> Rainer >>> >>> >>>> setClass("fun", representation(x = "numeric")) >>> [1] "fun" >>>> new("fun") >>> An object of class “fun” >>> Slot "x": >>> numeric(0) >>> >>>> setGeneric( >>> "beginYear", >>> function(object, ...) standardGeneric("beginYear") >>> ) >>> setGeneric( >>> + "beginYear", >>> + function(object, ...) standardGeneric("beginYear") >>> + ) >>> [1] "beginYear" >>> >>>> beginYear.Fun = function(x) x^2 >>>> beginYear.Fun(4) >>> [1] 16 >> >> Are you confusing S3 and S4 method systems? The .Fun has no special >> meaning in S4 RMK> I am trying to use S4, and don't know much about S3 - The is simply a RMK> separator - I probably should have used _ instead. >> >>>> setMethod( >>> "beginYear", >>> signature( object = "numeric" ), >>> beginYear >>> ) >> >> here the beginYear,numeric-method is defined to invoke the beginYear >> generic, so you end up calling yourself. You might have meant >> >> setMethod(beginYear, signature(object="numeric"), beginYear.Fun) RMK> That's it exactly. well, as Martin Morgan told you : >> but I would have written >> >> setMethod(beginYear, signature(object="numeric"), >> function(object, ...) object^2) it's quite *un*usual to explicitly ``define a function'' for the method, i.e. to assign it to a variable before using it. But I agree that this is always a matter of taste, as well. RMK> That also would have been an option. yes, "the usual S4-like" option. Martin Maechler, ETH Zurich RMK> Thanks, RMK> Rainer >> >> Martin >> >>> setMethod( >>> + "beginYear", >>> + signature( object = "numeric" ), >>> + beginYear >>> + ) >>> [1] "beginYear" >>> >>>> beginYear.Fun(4) >>> [1] 16 >>> >>>> beginYear(4) >>> Error: evaluation nested too deeply: infinite recursion / options(expressions=)? >>>> >> >> -- >> Martin Morgan >> Computational Biology / Fred Hutchinson Cancer Research Center >> 1100 Fairview Ave. N. >> PO Box 19024 Seattle, WA 98109 >> >> Location: Arnold Building M1 B861 >> Phone: (206) 667-2793 >> RMK> -- RMK> Rainer M. Krug, Centre of Excellence for Invasion Biology, RMK> Stellenbosch University, South Africa RMK> ______________________________________________ RMK> R-help@r-project.org mailing list RMK> https://stat.ethz.ch/mailman/listinfo/r-help RMK> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html RMK> and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.