如何检查是否有任何参数通过“传递”&引用;(省略号)在R?缺少的(…)有效吗?

如何检查是否有任何参数通过“传递”&引用;(省略号)在R?缺少的(…)有效吗?,r,ellipsis,R,Ellipsis,我想检查一个R函数的“…”(省略号)参数是否被输入了一些值/参数 目前,我正在使用类似于: test1 <- function(...) { if (missing(...)) TRUE else FALSE } test1() ## [1] TRUE test1(something) ## [2] FALSE test1我认为match.call是您所需要的: test <- function(...) {match.call(expand.dots = FALSE

我想检查一个R函数的“…”(省略号)参数是否被输入了一些值/参数

目前,我正在使用类似于:

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

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

test1我认为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))
test测试()
测试()
>测试(x=3,y=2,z=5)
测试(…=列表(x=3,y=2,z=5))
它将在每次传递省略号中的值时为您提供,如果您不传递任何值,它将为空


希望有帮助

如果您试图传入一个不存在的对象,那么这里有一个替代方法将抛出一个错误

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

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


get.params如果arg列表中有更多参数(除了“…”),我应该测试
any(名称(match.call(expand.dots=FALSE)[-1])==“…”)
,不是吗?:)如果你一定想让它告诉你是真是假,那么是的,上面的工作很好。如果不这样做,则上述函数也可以使用除“…”之外的更多参数。正如您已经知道的,
test-Sure,但我真的想知道
missing(…)
是否有效:顺便说一句,为了测试
下是否有内容,
长度(list(…)==0
是一点点。无论如何,谢谢@gagolews它应该更慢,因为它强制进行评估。如果你不知道为什么要检查这些信息,或者你在用这些信息做什么,很难说什么更好。也许在这里扔比较好,也许以后再扔比较好。假设,如果您发现有参数,您将对它们做一些处理,这将强制执行计算和错误
length(list(…)
也是比
missing(…)
BTW多了一个函数调用,你说
if(length(list(…)==0)
,你在基准测试中使用了
if(length(list(…)>0)
。我认为
if(length(list(…)))
稍微快一点(即隐式转换为逻辑比比较数字快一点)
get.params <- function (...) {
  params <- list()

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

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