自定义缺失功能

时间:2014-04-25 19:34:23

标签: r

无论参数是否具有默认值,

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

有更简洁的方法吗?

1 个答案:

答案 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。