假设我有像
这样的功能z <- function(x, ...) {
print(x)
}
如果缺少...
,该函数应该做一件事;如果指定了...
,则该函数应该对其执行其他操作。在这种情况下,我可以使用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")
}
。给出价值。
以下是一些实验:
> z()
TRUE
> z(a=1)
FALSE
> Obj()[]
FALSE
NULL
> Obj()[a=1]
FALSE
NULL
使用上面的代码评估以下内容:
Obj()[]
但是,在RStudio中Browse[1]> list(...)
Error: argument is missing, with no default
Browse[1]> missing(...)
[1] FALSE
的调试模式中,它就像
z()
某种方式适用于Obj()[]
的方法不适用于...
。是否有一种优雅的方式,只需要很少的开销来检测我实际遇到的[.Obj(x, ...)
案例是否缺少{{1}}?
答案 0 :(得分:3)
尝试检查是否缺少..1
:
> `[.Obj` <- function(x, ...) missing(..1)
> Obj()[a=1]
[1] FALSE
> Obj()[]
[1] TRUE
答案 1 :(得分:0)
怎么样:
`[.Obj` <- function(x,...) {
length(as.list(match.call(expand.dots=TRUE))[-c(1,2)])==1L
}
注意到对于某些函数(例如[.data.frame
), empty 参数与不存在的参数(即缺失)不同。