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.weyla...@gmail.com> > An: r-help <r-help@r-project.org>, Johannes Radinger <jradin...@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 <jradin...@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.weyla...@gmail.com> > >> An: Johannes Radinger <jradin...@gmx.at> > >> CC: r-help@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 <jradin...@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@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 -- ______________________________________________ R-help@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.