假设我有一个类似的功能
z <- function(x, ...) {
print(x)
}
Run Code Online (Sandbox Code Playgroud)
如果...缺少,该功能应该做一件事; 如果...指定,则该函数应该对其执行其他操作.在这种情况下,我可以missing(...)用来检测是否..缺失.但是我没有找到一种优雅的方法来检测泛型方法,比如[.Obj(x, ...)丢失...仍然是一个pairlist(<emptyname>),missing(...) = FALSE即使我没有给出值.
以下是一些实验:
z <- function(x, ...) {
cat(missing(...))
}
Obj <- function() {
env <- environment()
class(env) <- "Obj"
env
}
`[.Obj` <- function(x,...) {
cat(missing(...),"\n")
}
Run Code Online (Sandbox Code Playgroud)
使用上面的代码评估以下内容:
> z()
TRUE
> z(a=1)
FALSE
> Obj()[]
FALSE
NULL
> Obj()[a=1]
FALSE
NULL
Run Code Online (Sandbox Code Playgroud)
但是,在Obj()[]RStudio的调试模式下,它就像
Browse[1]> list(...)
Error: argument is missing, with no default
Browse[1]> missing(...)
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
不知何故,适用的方式z()不起作用Obj()[].是否有一种优雅的方式,几乎没有开销来检测我实际遇到...的[.Obj(x, ...)情况是否缺失?
另见:http://r.789695.n4.nabble.com/Arguments-passing-through-dot-dot-dot-lose-ability-to-check-for-missing-td4656455.html
尝试检查是否..1丢失:
> `[.Obj` <- function(x, ...) missing(..1)
> Obj()[a=1]
[1] FALSE
> Obj()[]
[1] TRUE
Run Code Online (Sandbox Code Playgroud)