【问题标题】:R function return value as well warning messageR函数返回值以及警告信息
【发布时间】:2016-06-21 20:34:34
【问题描述】:

我调用了其他 lib 函数,它进行计算并抛出警告消息。我尝试使用 tryCatch() 来捕获消息,但不知道如何保留计算值和警告消息。这是示例(简化)代码,我希望 mydiv 函数同时具有计算值和警告消息。现在 mydiv 调用将返回除法值或警告,但不能同时返回。

mydiv = function(x, y){  
tryCatch({
# raise warning message
if (x > y)
  warning("throw a warning")
  # function calc result
  x/y
}, 
warning = function(war) {
flag = paste("DIV Warning:", war$message)
return (flag)
},
error = function(err) {
 flag = paste("DIV Err", err)   
 return (flag)
})
}

如果我调用 x = mydiv(2, 1) 那么 x 的值为 "DIV Warning: throw a warning";如果 x = mydiv(2, 4) 那么 x: [1] 0.5。 所以我的问题是:1.使用tryCatch:如果可能的话,如何返回计算值和警告信息; 2. 是否有更好的方法从函数中获取两个值。

【问题讨论】:

    标签: r function try-catch


    【解决方案1】:

    您可以使用内置的警告功能,如下所示:

    mydiv = function(x, y){  
      if (x > y)
        warning("throw a warning")
      # function calc result
      return(x/y)
    }
    

    如果您想返回警告而不是将其作为警告消息发出,您可以返回一个命名列表,如果没有生成警告,列表中的警告条目将为 NA:

    mydiv = function(x, y){
      warn <- NA  
      if (x > y)
        warn <- "throw a warning"
      # function calc result
      return(list(value=x/y, warning=warn))
    }
    

    【讨论】:

      猜你喜欢
      • 2013-09-11
      • 2016-12-09
      • 2020-01-09
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2020-09-15
      • 2016-08-14
      相关资源
      最近更新 更多