Test if an argument of a function is set or not in R

北城以北 提交于 2019-12-17 15:34:48

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!