you may be looking for ?missing

f <- function(a,b) {
    if (missing(b)) print("b is missing")
}

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

Regards,
Enrico

Am 06.12.2011 16:15, schrieb Johannes Radinger:
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.

--
Enrico Schumann
Lucerne, Switzerland
http://nmof.net/

______________________________________________
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.

Reply via email to