【问题标题】:tryCatch block in R, returning variableR中的tryCatch块,返回变量
【发布时间】:2018-01-22 22:28:18
【问题描述】:

所以,我想了解 R 中 tryCatch 的范围和功能。

下面一行:

arima(rep(1,3), order = c(1,0,0))

生成警告和错误,但是在 tryCatch 块中只有警告函数返回值。如何访问警告和错误的返回值?

tryTest = tryCatch(
  {
    arima(rep(1,3), order = c(1,0,0))
  }, 
  warning = function(w) {

    print('this is warning')
    print(w)
    return('return string from warning')
  },
  error = function(e) {
    print('this is error')
    print(e)
    return('return string from error')
  },
  finally = {}
)

print(tryTest)

只生产:

 "return string from warning"

【问题讨论】:

标签: r error-handling try-catch


【解决方案1】:

R 中的 tryCatch 允许您在出错时为变量赋值。下面是两个最小的例子:

my_logo <- tryCatch(
{
  my_logo <- RCurl::getURLContent("https://invalid.website")
},
error = function(cond){
  my_logo <- "there is no image"
},
finally = {
  #pass
})

> my_logo
[1] "there is no image"

my_var <- tryCatch(
{
  my_var <- "a"/1
},
error = function(cond){
  my_var <- "foo"
},
finally = {
  #pass
})

> my_var
[1] "foo"

同样,您可以返回一个警告值,正如您已经知道的那样。您不应该编写您的 tryCatch 语句,使其可能同时遇到错误和警告。我什至不确定这是否可能。


编辑:为了完整起见,我添加了一个带有警告的示例:

my_var <- tryCatch(
{
  warning()
  my_var <- "a"/1
},
warning = function(cond){
  print("There was a warning")
  return("bar")
},
error = function(cond){
  my_var <- "foo"
  print("This message will not be printed.")
},
finally = {
  #pass
})
[1] "There was a warning"
> my_var
[1] "bar"

【讨论】:

  • 这没有回答问题,因为 OP 似乎对警告和错误感兴趣。
猜你喜欢
  • 2018-07-01
  • 2014-03-24
  • 1970-01-01
  • 1970-01-01
  • 2020-11-20
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多