【发布时间】:2014-08-20 01:31:04
【问题描述】:
假设我有一个类似的函数
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
但是,在 RStudio 中 Obj()[] 的调试模式下,它就像
Browse[1]> list(...)
Error: argument is missing, with no default
Browse[1]> missing(...)
[1] FALSE
不知何故,适用于z() 的方式不适用于Obj()[]。有没有一种优雅的方法来检测我实际遇到的[.Obj(x, ...) 是否缺少...?
【问题讨论】:
-
你能用
missing(...)吗? -
@GSee 它不适用于 [.Obj(x,...) 情况。
-
目前,我最好的解决方案是
if(any(nzchar(substitute(...)))),以防Obj()[f(x)] -
或者
if (length(list=...) == 0 )?
标签: r missing-data