Skip to content
Back to formatted view

Raw Message

Message-ID: <CAO1zAVb_R22qDehCxzn7WCJhbPTYw8+aWYWzqM4KZEUJaTEnpg@mail.gmail.com>
Date: 2014-08-25T14:27:50Z
From: Joris Meys
Subject: dubious behaviour of match.arg() with nested functions.

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]]