R-函数参数中的椭圆(`...`)和`NULL`

时间:2019-01-30 09:09:22

标签: r function parameter-passing ellipse

设想

examplefn <- function(x = NULL, ...){str(x)}

我正在尝试使用此函数来兑现隐式x = NULL。请考虑以下内容:

对于同时使用x...的通话,结果如预期:

> examplefn(1,2)
num 1

如果使用显式x = NULL,则该行为也符合预期:

> examplefn(x = NULL,2)
NULL

但是,当尝试(并期望从函数定义中使用x = NULL时,我得到:

> examplefn(2)
num 2

简单地说,该调用是根据参数顺序评估的,而无视x = NULL的定义。

如何预防后者?

1 个答案:

答案 0 :(得分:2)

仅当未提供x = NULL值时才使用定义x。因此,在写入examplefn(2)时,R读取的是examplefn(x = 2)(因为x是参数编号1),因此是结果。

如果您想避免这种情况,可以采取以下几种方法:

1。。通过创建两个函数

fun0 <- function (x, ...) str(x) 
fun1 <- function (...) fun0(NULL, ...)
fun1(2)
# NULL

2。。另一种方法是为您命名参数,例如

fun2 <- function (x = NULL, y) str(x)
fun2(y = 2) 
# NULL

3。。也许对您来说最方便的另一种方法是简单地对参数重新排序,请参见

fun3 <- function (..., x = NULL) str(x)
fun3(2)  
# NULL

4。最后,这也是一种(简单的)可能性-在函数内部设置x <- NULL

fun4 <- function (...) {
  x <- NULL
  str(x)
}
fun4(2)    
# NULL

但是我假设您有理由希望x作为参数。