如何在没有全局变量或超赋值的情况下使用 tryCatch
How to use tryCatch without global variables or superassignment
我正在编写一个带有以下形式的 tryCatch()
循环的 R 程序包,其中我首先尝试使用一种容易出错的方法来拟合模型,但如果第一次失败,则使用更安全的方法:
# this function adds 2 to x
safe_function = function(x) {
tryCatch( {
# try to add 2 to x in a stupid way that breaks
new.value = x + "2"
}, error = function(err) {
message("Initial attempt failed. Trying another method.")
# needs to be superassignment because inside fn
assign( x = "new.value",
value = x + 2,
envir=globalenv() )
} )
return(new.value)
}
safe_function(2)
此示例按预期工作。但是,使用 assign
在检查包的 CRAN-readiness 时会触发一条注释:
Found the following assignments to the global environment
如果我将 assign
替换为 <<-
,也会出现类似的问题。我能做什么?
我不确定您为什么要在此处尝试使用全局范围。您可以 return 来自 try/catch
.
的值
safe_function = function(x) {
new.value <- tryCatch( {
# try to add 2 to x in a stupid way that breaks
x + "2"
}, error = function(err) {
message("Initial attempt failed. Trying another method.")
x + 2
} )
return(new.value)
}
我正在编写一个带有以下形式的 tryCatch()
循环的 R 程序包,其中我首先尝试使用一种容易出错的方法来拟合模型,但如果第一次失败,则使用更安全的方法:
# this function adds 2 to x
safe_function = function(x) {
tryCatch( {
# try to add 2 to x in a stupid way that breaks
new.value = x + "2"
}, error = function(err) {
message("Initial attempt failed. Trying another method.")
# needs to be superassignment because inside fn
assign( x = "new.value",
value = x + 2,
envir=globalenv() )
} )
return(new.value)
}
safe_function(2)
此示例按预期工作。但是,使用 assign
在检查包的 CRAN-readiness 时会触发一条注释:
Found the following assignments to the global environment
如果我将 assign
替换为 <<-
,也会出现类似的问题。我能做什么?
我不确定您为什么要在此处尝试使用全局范围。您可以 return 来自 try/catch
.
safe_function = function(x) {
new.value <- tryCatch( {
# try to add 2 to x in a stupid way that breaks
x + "2"
}, error = function(err) {
message("Initial attempt failed. Trying another method.")
x + 2
} )
return(new.value)
}