我有以下功能:
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值?
答案 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以使函数的其余部分更容易使用。