问题
I have a function f
that takes two parameters (p1
and p2
):
If for the parameter p2
no value was passed to the function, the value of p1
^2 should be used instead. But how can I find out within the function, if a value is given or not. The problem is that the variable p2
is not initialized if there was no value. Thus I can't test for p2
being NULL
.
f <- function(p1, p2) {
if(is.null(p2)) {
p2=p1^2
}
p1-p2
}
Is it somehow possible to check if a value for p2
was passed to the function or not? (I could not find an isset()
- function or similar things.)
回答1:
You use the function missing()
for that.
f <- function(p1, p2) {
if(missing(p2)) {
p2=p1^2
}
p1-p2
}
Alternatively, you can set the value of p2 to NULL by default. I sometimes prefer that solution, as it allows for passing arguments to nested functions.
f <- function(p1, p2=NULL) {
if(is.null(p2)) {
p2=p1^2
}
p1-p2
}
f.wrapper <-function(p1,p2=NULL){
p1 <- 2*p1
f(p1,p2)
}
> f.wrapper(1)
[1] -2
> f.wrapper(1,3)
[1] -1
EDIT: you could do this technically with missing()
as well, but then you would have to include a missing()
statement in f.wrapper
as well.
回答2:
I think '?missing' should do it.
回答3:
In a case like this you can also use something like this:
f <- function(p1, p2 = p1 ^ 2) {
p1-p2
}
See the part on Lazy evaluation at http://adv-r.had.co.nz/Functions.html
来源:https://stackoverflow.com/questions/7964830/test-if-an-argument-of-a-function-is-set-or-not-in-r