【问题标题】:Test if an unevaluated promise exists测试是否存在未评估的承诺
【发布时间】:2017-11-22 14:36:36
【问题描述】:

我有以下功能:

f <- function(a, b=list()) {
  if(exists("b")) {
    if(exists("x",b)){
      a+b[["x"]]
    } else {
      a
    }
  } else {
    -a
  }
}

它是有效的,除非我为b 设置了一个未定义的值:

exists("tmp")
# [1] FALSE
f(a = 1, b=tmp)
# Error in exists("x", b) : object 'tmp' not found

是否有一个函数可以检查我的函数 f 中是否存在承诺值?

【问题讨论】:

  • 在我的示例中,missing(b)False,是否有 b = tmp 作为函数的参数。

标签: r


【解决方案1】:

这样的事情怎么样。

f <- function(a, b=list()) {
  tryCatch(force(b), error=function(e) b<<-NULL)
  if(!is.null(b)) {
    if(exists("x",b)){
      a+b[["x"]]
    } else {
      a
    }
  } else {
    -a
  }
}

f(5, tmp)
# [1] -5
f(5, list(x=3))
# [1] 8
f(5, list(z=3))
# [1] 5

在这里,我们强制评估参数以查看它是否存在或解析为 tryCatch() 表达式中的某些内容,以处理变量不存在的情况。如果它不存在,我们将其设置为 NULL 以使函数的其余部分更易于使用。

【讨论】:

    猜你喜欢
    • 2016-05-12
    • 2013-06-23
    • 2017-10-20
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多