[Rd] dubious behaviour of match.arg() with nested functions.

peter dalgaard pdalgd at gmail.com
Mon Aug 25 18:22:57 CEST 2014


On 25 Aug 2014, at 16:27 , 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?
> 

What you are experiencing would seem to amount to this:

> f <- function(x=c("a","b","c")) {x <- letters[1:3] ; match.arg(x)}
> f()
[1] "a"
> f <- function(x=c("a","b","c")) {x <- letters[1:2] ; match.arg(x)}
> f()
Error in match.arg(x) : 'arg' must be of length 1

Words to that effect appear in the Details section of ?match.arg

-Peter D

-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Email: pd.mes at cbs.dk  Priv: PDalgd at gmail.com



More information about the R-devel mailing list