测试是否在R中设置了函数的参数

时间:2011-11-01 09:55:29

标签: r function variables variable-assignment isset

我有一个函数f,它有两个参数(p1p2):

如果对于参数p2没有将值传递给函数,则应使用p1 ^ 2的值。但是,如果给出一个值,我怎样才能在函数中找到。问题是如果没有值,则不会初始化变量p2。因此,我无法测试p2 NULL

f <- function(p1, p2) {
    if(is.null(p2)) {
        p2=p1^2
    }
    p1-p2
}

是否有可能检查p2的值是否传递给函数? (我找不到isset() - 函数或类似的东西。)

3 个答案:

答案 0 :(得分:61)

您可以使用函数missing()

f <- function(p1, p2) {
    if(missing(p2)) {
        p2=p1^2
    }
    p1-p2
}

或者,您可以默认将p2的值设置为NULL。我有时更喜欢这个解决方案,因为它允许将参数传递给嵌套函数。

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

编辑:您也可以使用missing()进行技术操作,但是您也必须在missing()中添加f.wrapper语句。

答案 1 :(得分:7)

我认为'缺少'应该这样做。

答案 2 :(得分:5)

在这种情况下,您也可以使用以下内容:

f <- function(p1, p2 = p1 ^ 2) {
    p1-p2
}

请参阅http://adv-r.had.co.nz/Functions.html

上有关延迟评估的部分