代码之家  ›  专栏  ›  技术社区  ›  balin

函数参数中的r-椭圆(`…`)和'null'

  •  4
  • balin  · 技术社区  · 6 年前

    想象

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

    我想用这个函数来表示 x = NULL . 考虑以下事项:

    对于使用两种方法的呼叫 x ... 结果如预期:

    > examplefn(1,2)
    num 1
    

    如果使用显式 x=空 ,行为也如预期:

    > examplefn(x = NULL,2)
    NULL
    

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

    > examplefn(2)
    num 2
    

    表示调用是按参数顺序计算的,而不考虑 x=空 定义。

    怎样才能防止后者呢?

    1 回复  |  直到 6 年前
        1
  •  3
  •   niko    6 年前

    定义 x = NULL 仅在不使用时使用 x 提供了值。所以在写作的时候 examplefn(2) 什么 R 读数是 examplefn(x = 2) (AS) 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
    

    三。 另一种方法,也许对你来说最方便,就是简单地重新排列参数,参见

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

    4。 最后,这里还有一个(微不足道的)可能性设置 x <- NULL 在函数内部

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

    但我假设你有理由想要 X 作为一个论点。

    推荐文章