【问题标题】:Custom missing function自定义缺失函数
【发布时间】:2014-04-25 19:34:23
【问题描述】:

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

有没有更简洁的方法?

【问题讨论】:

  • if(missing(a)){TRUE}?
  • 您写道,“我想要一个缺失版本,它仅对没有默认值的未提供参数返回 TRUE。”当a 是函数参数时,if(missing(a)) TRUE 会这样做。
  • if (missing(a)) TRUE 等价于missing(a),只是在提供a 时返回NULL。我想要一个函数,当提供a 或它具有默认值时返回FALSE,否则返回TRUE
  • 不,这正是我要求的。

标签: r


【解决方案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。

【讨论】:

  • 谢谢,tryCatch 更简单。事实上,你甚至不需要force
  • 你是对的,这更简单。为了清楚起见,我个人可能会保留它。
猜你喜欢
  • 2020-09-12
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
  • 2017-04-04
  • 2017-12-18
  • 2020-03-27
  • 2020-11-16
相关资源
最近更新 更多