dubious behaviour of match.arg() with nested functions.
This is one of the perils of non-standard evaluation - functions are no longer referentially transparent. Hadley
On Mon, Aug 25, 2014 at 9:27 AM, Joris Meys <jorismeys at gmail.com> wrote:
Dear all,
I initially ran into this problem while rebuilding a package dependent on
nleqslv. I got the following error:
Error in match.arg(global) : 'arg' must be of length 1
This didn't occur in previous versions of nleqslv, but did in the current
one (2.4). I think I pinned the problem down to the following example:
Take two functions:
test <- function(x=c("q","r","s"),global=c("d","e","r","z","q")){
x <- match.arg(x)
global <- match.arg(global)
return(list(x,global))
}
test2 <- function(x=c("q","r","s"),global=c("d","z","q")){
test(x=x,global=global)
}
test2() calls an "internal" function test() that uses the same arguments.
Note that for x both functions have exactly the same defaults, but not for
global.
Calling test2() gives the reported error:
test2()
Error in match.arg(global) : 'arg' must be of length 1 I see the point of this error (global is not seen by test2() as default settings but as a character vector I presume), but I wonder why this isn't the case for x. Is this by design? If so, is there a part of the manual I overlooked? Cheers Joris -- Joris Meys Statistical consultant Ghent University Faculty of Bioscience Engineering Department of Mathematical Modelling, Statistics and Bio-Informatics tel : +32 9 264 59 87 Joris.Meys at Ugent.be ------------------------------- Disclaimer : http://helpdesk.ugent.be/e-maildisclaimer.php [[alternative HTML version deleted]]
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel