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

R_U*_*ser 53 variables r function variable-assignment isset

我有一个f带两个参数(p1p2)的函数:

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

f <- function(p1, p2) {
    if(is.null(p2)) {
        p2=p1^2
    }
    p1-p2
}
Run Code Online (Sandbox Code Playgroud)

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

Jor*_*eys 69

你使用这个功能missing().

f <- function(p1, p2) {
    if(missing(p2)) {
        p2=p1^2
    }
    p1-p2
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以将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
Run Code Online (Sandbox Code Playgroud)

编辑:你也可以在技术上这样做missing(),但是你也必须包括一个missing()声明f.wrapper.

  • +1为“ NULL”默认替代项。回复:您添加的EDIT,如何通过包装函数向下传递“缺少”状态? (2认同)

mds*_*ner 7

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


Joh*_*han 6

在这种情况下你也可以使用这样的东西:

f <- function(p1, p2 = p1 ^ 2) {
    p1-p2
}
Run Code Online (Sandbox Code Playgroud)

请参阅http://adv-r.had.co.nz/Functions.html上关于懒惰评估的部分