测试是否存在未评估的承诺

时间:2017-11-22 14:36:37

标签: r

我有以下功能:

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中是否存在promise值?

1 个答案:

答案 0 :(得分: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以使函数的其余部分更容易使用。