missing
都会为调用者未提供的参数返回TRUE
。
f <- function(a, b=2, c) {
cat(missing(a), missing(b), missing(c), fill=TRUE)
}
f(a=1)
# FALSE TRUE TRUE
我想要missing
的版本只返回TRUE
仅针对没有默认值的未提供参数。我想出了一些东西,但它有点难看。
really.missing <- function(x) {
name.supplied <- as.character(substitute(x))
do.call(function(y) missing(y),
unname(mget(name.supplied, envir=parent.frame())))
}
ff <- function(a, b=2, c) {
cat(really.missing(a), really.missing(b), really.missing(c), fill=TRUE)
}
ff(a=1)
# FALSE FALSE TRUE
有更简洁的方法吗?
答案 0 :(得分:1)
如果我理解你的问题,那该怎么做:
noval<- function(x) {
tryCatch( {force(x); FALSE}, error = function(x) TRUE)
}
f <- function(a, b=2, c) {
cat(noval(a), noval(b), noval(c), fill=TRUE)
}
f(a=1)
此noval
函数将强制您的参数被评估(如果传入或者设置了默认值,则会成功,否则会失败)并相应地返回FALSE / TRUE。