On Tue, Dec 6, 2011 at 7:15 AM, Johannes Radinger <jradin...@gmx.at> wrote: > Thank you, i didn't know that the !operator is > also working for is.numeric etc.
Read (more carefully?) R docs, please. ! is a unary function that takes a logical argument(and will coerce to logical nonlogical arguments if it can); is.numeric() returns a logical, so of course it should "work". Ergo your failure to understand indicates a fundamental hole in your understanding of how R works. -- Bert > > 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. -- Bert Gunter Genentech Nonclinical Biostatistics Internal Contact Info: Phone: 467-7374 Website: http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm ______________________________________________ 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.