设想
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
的定义。
如何预防后者?
答案 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
作为参数。