73

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

如果参数p2没有值传递给函数,p1则应使用 ^2 的值。但是我如何在函数中找出是否给出了一个值。p2问题是如果没有值,变量就不会被初始化。因此我无法测试p2存在NULL

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

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

4

3 回答 3

100

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

于 2011-11-01T10:09:40.460 回答
8

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

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

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

于 2013-12-12T13:29:13.230 回答
7

我认为'?missing'应该这样做。

于 2011-11-01T10:09:49.043 回答