[R] take precisely one named argument

Robin Hankin r.hankin at soc.soton.ac.uk
Fri Dec 17 13:18:17 CET 2004


I want a function that takes precisely one named argument and no
unnamed arguments. The named argument must be one of "a" or "b".

If "a" is supplied, return "a".  If "b" is supplied, return 2*b.
That is, the desired behaviour is:

R> f(a=4)   #return 4
R> f(b=33)  #return 66
R> f(5)      #error
R> f(a=3,b=5)   #error
R> f(a=3,q=3)   #error
R> f(q=3)       #error

The following function is intended to implement this:

f <- function(a=NULL, b=NULL){
   if(!xor(is.null(a), is.null(b))){stop("specify exactly one of a and 

It almost works, but  f(6) returns 6 (and should be an error).

What is the best way to accomplish my desired behaviour?

Robin Hankin
Uncertainty Analyst
Southampton Oceanography Centre
European Way, Southampton SO14 3ZH, UK
  tel  023-8059-7743

More information about the R-help mailing list