R: Отличить ПУСТОЙ многоточие от того, которое содержит NULL? - PullRequest
0 голосов
/ 04 февраля 2019

Представьте себе:

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

Как я могу различить в ходе функции, являются ли точки производными от myfunct('something') (без точек) или myfunct('something', NULL) (точки включают явные NULL)?В моих экспериментах оба случая привели к is.null(dots), равному TRUE.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Я в итоге придумал следующее:

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"
0 голосов
/ 04 февраля 2019

Помогает ли?

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
...