如何通过R中的“...”(省略号)检查是否有任何参数?缺少(...)有效吗?

时间:2014-10-31 22:48:42

标签: r ellipsis

我想检查R函数的“...”(省略号)参数是否已经输入了一些值/参数。

目前我使用的是:

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

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

虽然有效,但?missing并未表明该方式是否正确/有效。

如果上述情况不正确,那么这样做的方法是什么?或者还有其他更快的方法? PS。我需要this问题的这种验证。

3 个答案:

答案 0 :(得分:9)

如果你尝试传入一个不存在的对象,这里会抛出一个错误。

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

答案 1 :(得分:4)

我认为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))

每次在省略号中传递值时,它都会给你,如果你不传递任何值,它将为空。

希望有所帮助!

答案 2 :(得分:0)

如果对任何人都有帮助,我最终使用以下函数来获取每个函数的省略号参数(返回一个空列表或参数列表):

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

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

  return(params)
}

针对:

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