[R] Argument validation within functions

Johannes Radinger JRadinger at gmx.at
Tue Dec 6 13:46:14 CET 2011


Hi,

thank you... I think I will go for the if-stop approach
as the stop() stops the total function... So there is just
one little other question: What is the opposite of is.numeric?
Is ther isnot.numeric? How  can that be implemented in following
function:

f <- function(a){
	if(is.numeric(a)) stop("a is not numeric")
	if(0 > a && a > 1) stop("a must be a value between 0 and 1")	
	a
}

/Johannes

-------- Original-Nachricht --------
> Datum: Tue, 6 Dec 2011 07:04:59 -0500
> Von: "R. Michael Weylandt" <michael.weylandt at gmail.com>
> An: Johannes Radinger <JRadinger at gmx.at>
> CC: r-help at r-project.org
> Betreff: Re: [R] Argument validation within functions

> The quick and dirty way to do so is to use: stopifnot() in conjunction
> (if necessary with all() and any()). You can replace that first
> condition with a simple is.numeric() as well. A more helpful way (if
> this is production code) is to use if statement with the stop()
> function directly which lets you provide specific error messages.
> 
> Michael
> 
> On Tue, Dec 6, 2011 at 6:41 AM, Johannes Radinger <JRadinger at gmx.at>
> wrote:
> > Hi,
> >
> > I just started with writing functions in R and so some questions popped
> up.
> > I provide some values as argument to my function such as:
> >
> > function(a,b,c){}
> >
> > Now i want that the function first checks if the arguments are valid for
> the function. E.g argument "a" has to be a number in the range 0-1. How
> can that easily done?
> >
> > So far I have:
> >
> >        a <- as.numeric(a)
> >        if(0 <= a && a <= 1)
> >
> > to first check if a is a number...if not the function stops and gives an
> error message. If it is a number it just continues...
> >
> > But how to check the range?
> > Above there is the if-approach but then the rest of the function is
> exectued as part of if (or else). Is there a simpler way without having the
> if-brackets around the remaining code?
> > Just a check if the value is between 0 and 1 and if yes continue with
> the next line if no abort the function with a error message? How can such an
> error message be created?
> >
> > thank you and best regards,
> >
> > /Johannes
> > --
> >
> > ______________________________________________
> > R-help at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.

--



More information about the R-help mailing list