在Scratch的Joel Grus的Data Science的Gradescent Descent一章中,他定义了一个“安全应用”函数,该函数以一个函数(称为f)作为参数,并返回一个新函数,该函数与f拥有相同的args,并在未引发错误时返回f(args),而在f(args)引发错误时返回Infinity。
他在Python中的代码是
def safe(f):
"""return a new function that's the same as f,
except that it outputs infinity whenever f produces an error"""
def safe_f(*args, **kwargs):
try:
return f(*args, **kwargs)
except:
return float('inf') # this means "infinity" in Python
return safe_f
他使用此函数重新指定名为target_fn
的现有函数,以便该函数在遇到错误时将返回Infinity
target_fn = safe(target_fn)
我们如何在R中定义类似的安全功能?
编辑:
使用tryCatch定义这样的功能:
safe <- function(f){
safeF <- function(...){
out <- tryCatch(
{f(...)},
error = function(errorMessage){
return(Inf)
}
)
return(out)
}
return(safeF)
}
新函数为所有输入返回一个Inf。