[Rd] rare bad bug in sys.function() {or match.arg()} (PR#1409)

maechler@stat.math.ethz.ch maechler@stat.math.ethz.ch
Fri, 22 Mar 2002 20:42:38 +0100 (MET)


I found this tracing a bug when experimenting with a new sort()
function using match.arg().

It was triggered because mosaicplot.default(.) has an argument
called `sort' and calls itself the sort() function  in which I
was using match.arg()...

Here is (input for) a small clean example :

####  bad  match.arg() // sys.function() bug :
####  MM, 22.3.2002

callme <- function(a = 1, mm = c("Abc", "Bde")){
    mm <- match.arg(mm)
    cat("mm = "); str(mm)
    invisible()
}


## These are as desired
callme()
callme(mm="B")

mycaller <- function(x = 1, callme = pi) {
    callme(x)
}

mycaller()
##-> mm = NULL

## but should give "Abc !!

-------

Explanation :

 In match.arg(), there's
     formal.args <- formals(sys.function(sys.parent()))
 and you can check that  sys.function(sys.parent())
 gives the number pi instead of the the callme function !! :

debug(match.arg)
mycaller()
.....

Martin Maechler <maechler@stat.math.ethz.ch>	http://stat.ethz.ch/~maechler/
Seminar fuer Statistik, ETH-Zentrum  LEO C16	Leonhardstr. 27
ETH (Federal Inst. Technology)	8092 Zurich	SWITZERLAND
phone: x-41-1-632-3408		fax: ...-1228			<><

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._