Как проверить, были ли какие-либо аргументы переданы через "..." (эллипсис) в R? Не хватает (...) действителен?

Я хотел бы проверить, был ли параметр R "..." (эллипсис) подан с некоторыми значениями/аргументами.

В настоящее время я использую что-то вроде:

test1 <- function(...) {
   if (missing(...)) TRUE
   else FALSE
}

test1()
## [1] TRUE
test1(something)
## [2] FALSE

Он работает, но ?missing не указывает, является ли этот способ правильным/действительным.

Если вышеуказанное неверно, что это за способ? Или, может быть, есть другие, более быстрые способы? PS. Мне нужна такая проверка для этой проблемы.

Ответы

Ответ 1

Вот альтернатива, которая будет вызывать ошибку, если вы попытаетесь передать несуществующий объект.

test2 <- function(...) if(length(list(...))) FALSE else TRUE

test2()
#[1] TRUE
test2(something)
#Error in test2(something) : object 'something' not found
test2(1)
#[1] FALSE

Ответ 2

Я думаю, что match.call - это то, что вам нужно:

test <- function(...) {match.call(expand.dots = FALSE)}

> test()
test()

> test(x=3,y=2,z=5)
test(... = list(x = 3, y = 2, z = 5))

Он будет давать вам каждый раз, когда значения передаются в многоточии, или он будет пустым, если вы не пройдете.

Надеюсь, это поможет!

Ответ 3

Если кому-то это поможет, я использовал следующую функцию, чтобы получить параметры многоточия для каждой функции (возвращает пустой список или список аргументов):

get.params <- function (...) {
  params <- list()

  if (length(list(...)) && !is.null(...)) 
    params <- unlist(...)

  return(params)
}

за:

f <- function(t, ...) {
 params <- get.params(...)
 print(paste(params))
}