[Rd] (PR#7320) Internal function isUME() in findGeneric() is wrong

Jeffrey J. Hallman m1jjh00 at frb.gov
Fri Oct 29 20:37:21 CEST 2004


OK, I looked at the documentation and you're right about that.  However,
I'm curious about why the first argument to UseMethod is ever necessary.
Is there ever a good reason for it to be something other than the name
of the calling function?  (Wouldn't that lead to confusing code?)  If
not, why bother with it at all?

I've become spoiled by programming a lot recently in Smalltalk, which is
the cleanest language I've used yet.

Jeff


Prof Brian Ripley <ripley at stats.ox.ac.uk> wrote:

  br> The issue is the use of UseMethod(), which you claim to be valid.  As it
  br> is inconsistent with the prime documentation, the help page, I would
  br> question if it is `perfectly legal'.  I expect the author of isUME
  br> implemented the behaviour described on the help page.

  br> It is documented in S-PLUS as *strongly discouraged*, and although it is
  br> documented in R-lang, I believe the right thing to do is to make the code
  br> agree with the prime documentation.

  br> I see no uses of UseMethod() in the R sources, and on CRAN only
  br> one in a comment (and none in BioC).

  br> On Thu, 28 Oct 2004 jhallman at frb.gov wrote:

  >> Full_Name: Jeff Hallman
  >> Version: 2.0
  >> OS: Linux
  >> Submission from: (NULL) (132.200.32.34)
  >> 
  >> 
  >> The function findGeneric() in the utils namespace contains this internal
  >> function:
  >> 
  >> isUME <- function(e) {
  >> if (is.call(e) && (is.name(e[[1]]) || is.character(e[[1]]))) {
  >> switch(as.character(e[[1]]), UseMethod = as.character(e[[2]]), 
  >> "{" = isUMEbrace(e), "if" = isUMEif(e), "")
  >> }
  >> else ""
  >> }
  >> 
  >> This fails if the generic called UseMethod() without an argument, which is
  >> perfectly legal.  Changing it to this seems to work:
  >> 
  >> isUME <- function(e) {
  >> if(is.call(e) &&(is.name(e[[1]]) || is.character(e[[1]]))) {
  >> switch(as.character(e[[1]]), 
  >> UseMethod = ifelse(length(e) == 1, fname, as.character(e[[2]])), 
  >> "{" = isUMEbrace(e),
  >> "if" = isUMEif(e),
  >> "")
  >> }
  >> else ""
  >> }
  >> 
  >> 
  >> Jeff
  >> 
  >> ______________________________________________
  >> R-devel at stat.math.ethz.ch mailing list
  >> https://stat.ethz.ch/mailman/listinfo/r-devel
  >> 
  >> 

  br> -- 
  br> Brian D. Ripley,                  ripley at stats.ox.ac.uk
  br> Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
  br> University of Oxford,             Tel:  +44 1865 272861 (self)
  br> 1 South Parks Road,                     +44 1865 272866 (PA)
  br> Oxford OX1 3TG, UK                Fax:  +44 1865 272595



More information about the R-devel mailing list