R:区分 EMPTY 省略号和包含 NULL 的省略号?

R: Differentiating EMPTY ellipsis from one containing NULL?

想象一下:

myfunct <- function(x, ...){
  dots <- list(...)
...
}

如何在函数执行过程中区分点是从 myfunct('something')(没有点)还是 myfunct('something', NULL)(点包括显式 NULL)派生的? 在我的实验中,这两种情况都会导致 is.null(dots) 等同于 TRUE

有帮助吗?

f <- function(x, ...){
  missing(...)
}
> f(2)
[1] TRUE
> f(2, NULL)
[1] FALSE

g <- function(x, ...){
  length(list(...))
}
> g(2)
[1] 0
> g(2, NULL)
[1] 1

我最终得出以下结论:

myfunct <- function(...)
{
  my_dots <- match.call(expand.dots = FALSE)[['...']]
  no_dots <- is.null(my_dots)
  # Process the dots
  if(!no_dots)
  {
     my_dots <- lapply(my_dots, eval)
  }
  # Exemplary return
  return(my_dots)
}

这产生:

> myfunct(1)
[[1]]
[1] 1

> myfunct(NULL)
[[1]]
NULL

> myfunct()
NULL

> myfunct(1, NULL, 'A')
[[1]]
[1] 1

[[2]]
NULL

[[3]]
[1] "A"