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

gag*_*ews 12 r ellipsis

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

目前我正在使用类似的东西:

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

test1()
## [1] TRUE
test1(something)
## [2] FALSE
Run Code Online (Sandbox Code Playgroud)

它有效,但?missing不表明该方式是否正确/有效.

如果以上不正确,那么这样做的方法是什么?或者还有其他更快的方法?PS.我需要针对问题进行此类验证.

GSe*_*See 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
Run Code Online (Sandbox Code Playgroud)


Lyz*_*deR 5

我认为 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))
Run Code Online (Sandbox Code Playgroud)

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

希望有帮助!