From: Parlamis Franklin <fparlamis_at_mac.com>

Date: Sat 23 Sep 2006 - 18:44:50 GMT

R-devel@r-project.org mailing list

https://stat.ethz.ch/mailman/listinfo/r-devel Received on Sun Sep 24 04:48:56 2006

Date: Sat 23 Sep 2006 - 18:44:50 GMT

Yes, I figured I might have entered the forbidden zone (one hint was that I had to set the group method to achieve my goal -- an attempt to directly set a method for the 'sqrt' function was frustrated in the manner you suggest). I have two followup questions and a request:

On Sep 23, 2006, at 3:35 AM, John Chambers wrote:

> Probably a bug, but not at all the one you imply. You have found a

*> way to subvert a guarantee in R that methods for primitives can
**> never be redefined for basic data types.
**>
**> As you no doubt found, but didn't show us, so long as you say sqrt
**> (4) the result is correct. (Your "Works" should really read
**> "Gotcha!").
**>
**> Since a large amount of effort and not a little programming pain
**> has been spent retaining the purity of primitive calls to satisfy
**> the efficiency lobby, it's not clear what should happen when one
**> insists on calling the generic function directly. Either an error
**> or just a call to the primitive would be the two likely
**> candidates. Not what happens in your first example though.
**>
**> If you really want a "numeric" class that does something different
**> for sqrt(), define an S4 class that contains "numeric"
**> > setClass("WeirdNumber", contains="numeric")
**> [1] "WeirdNumber"
**> > setMethod("Math", "WeirdNumber", function(x) "Weird")
**> [1] "Math"
**> > xx = new("WeirdNumber", 1:10)
**> > sqrt(xx)
**> [1] "Weird"
**>
**>
**> Parlamis Franklin wrote:
**>> i think these two code snippets exhibit a bug. they are
**>> identical but for the inclusion of an initial line in snippet [2]
**>>
**>> [1]
**>> setMethod("Math", signature(x = "numeric"), function(x) "Works")
**>> getGeneric("sqrt")(4)
**>>
**>> [2]
**>> getGeneric("sqrt")(4)
**>> setMethod("Math", signature(x = "numeric"), function(x) "Works")
**>> getGeneric("sqrt")(4)
**>>
**>> these are my results, when each is run from a fresh R session
**>>
**>> [1]
**>> > setMethod("Math", signature(x = "numeric"), function(x) "Works")
**>> [1] "Math"
**>> > getGeneric("sqrt")(4)
**>> [1] "Works"
**>>
**>> [2]
**>> > getGeneric("sqrt")(4)
**>> `__Deferred_Default_Marker__`
**>> > setMethod("Math", signature(x = "numeric"), function(x) "Works")
**>> [1] "Math"
**>> > getGeneric("sqrt")(4)
**>> `__Deferred_Default_Marker__`
**>>
**>> the section in "How Methods Work" that deals with this is
**>> unfinished, but i think it suggests that getGeneric("sqrt")(4)
**>> should work out of the box.
**>>
**>> franklin parlamis
**>>
**>> > version
**>> _
**>> platform powerpc-apple-darwin8.7.0
**>> arch powerpc
**>> os darwin8.7.0
**>> system powerpc, darwin8.7.0
**>> status beta
**>> major 2
**>> minor 4.0
**>> year 2006
**>> month 09
**>> day 22
**>> svn rev 39471
**>> language R
**>> version.string R version 2.4.0 beta (2006-09-22 r39471)
**>>
**>> ______________________________________________
**>> R-devel@r-project.org mailing list
**>> https://stat.ethz.ch/mailman/listinfo/r-devel
**>>
**>>
*

R-devel@r-project.org mailing list

https://stat.ethz.ch/mailman/listinfo/r-devel Received on Sun Sep 24 04:48:56 2006

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.1.8, at Sun 24 Sep 2006 - 23:30:09 GMT.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel.
Please read the posting
guide before posting to the list.
*