[R] Argument validation within functions

Johannes Radinger JRadinger at gmx.at
Tue Dec 6 16:15:21 CET 2011


Thank you, i didn't know that the !operator is
also working for is.numeric etc.

Anyway I want to test if an argument is set in the
function call and if not a code is executed... So 
far I tried:

f <-function(a,b){
	if(!exists("b")) print("exists: b is not set")
	if(is.null("b")) print("is.null : b is not set")
}

f(a=1,b=2)
f(a=1)
f(b=2)

I don't really know how to do it...e.g: for f(a=1) b is not set
so it also can't be NULL (thats why is.null is not working). I
just want to "test" if it is set with the function call not outside
the function or before etc.

/Johannes

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

> Use the ! (not) operator.
> 
> Not sure what you mean by " as the stop() stops the total function":
> try the following
> 
> f <- function(a){
>    stopifnot(a > 3)
>    return(a^2)
> }
> 
> f(2)
> f(4)
> 
> Michael
> 
> (PS -- It's usually asked to cc the list so that this all gets
> threaded properly in folks' mailboxes)
> 
> On Tue, Dec 6, 2011 at 7:46 AM, Johannes Radinger <JRadinger at gmx.at>
> wrote:
> > 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.
> >
> > --
> > NEU: FreePhone - 0ct/min Handyspartarif mit Geld-zurück-Garantie!
> > Jetzt informieren: http://www.gmx.net/de/go/freephone

--



More information about the R-help mailing list