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

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

如果对于参数 p2没有向函数传递值,则应改为使用 p1 ^ 2的值。但是我怎么才能在函数中找出,是否给出了一个值。问题是,如果没有值,变量 p2就不会初始化。因此,我不能测试 p2NULL

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

23344 次浏览

您可以使用函数 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()做到这一点,但是之后还必须在 f.wrapper中包含 missing()语句。

我认为“ ? 失踪”应该做到这一点。

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

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

See the part on Lazy evaluation at http://adv-r.had.co.nz/Functions.html