【问题标题】:return logical TRUE/FALSE from try, tryCatch, or similar?从 try、tryCatch 或类似中返回逻辑 TRUE/FALSE?
【发布时间】:2013-01-22 23:12:00
【问题描述】:

R 中是否有一个函数在给出错误时返回“FALSE”,否则返回“TRUE”?或者类似的东西,还是我需要通过评估ifelse(class(try(stop())) == "try-error", FALSE, TRUE)之类的东西来创建自己的?

【问题讨论】:

    标签: r error-handling try-catch


    【解决方案1】:

    我不得不偶尔或两次这样做。我所做的是我在这些方面使用了tryCatch。如果您在进行模拟并且有时某些算法不会收敛并产生警告,但您想忽略它,这可能会很方便,因为您不希望您的模拟在超级计算机上的 100 个节点上运行时终止。

    > out <- tryCatch(stop("bla"), error = function(e) e)
    > any(class(out) == "error")
    [1] TRUE
    

    如果进程不间断(没有错误),您将得到 FALSE。

    > out <- tryCatch(1:5, error = function(e) e)
    > out
    [1] 1 2 3 4 5
    > any(class(out) == "error")
    [1] FALSE
    

    【讨论】:

      【解决方案2】:

      您肯定不想使用ifelse,但也许这会显示更有效的路线:

      > if( inherits(res <- try( stop() ),  "try-error") ){ FALSE} else{ res}
      Error in try(stop()) : 
      [1] FALSE
      
      > if( inherits( res <- try( "ppp" ),  "try-error") ){ FALSE} else{ res}
      [1] "ppp"
      

      现在我想了一下:答案只是inherits(tryres, "try-error"),因为它确实返回了一个逻辑。您决定如何处理它取决于您。确实,多次测试class(tryres)=="tryerror 会成功,但有时返回的类不止一个,在这种情况下不会。

      【讨论】:

      • 测试中最多只能有一项。
      • @Abe - ifelse(vector of TRUE/FALSE,value to replace when vector==TRUE,value to replace when vector==FALSE)if(single condition==TRUE) {do something} else {do something else} 相比
      • @thelatemail 知道了...那么使用any 将向量转换为单个条件是否更合适(如answer by @Roman 中所做的那样)?
      • 是的,或者使用 inherits() 来实现相同的目标
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 2017-04-08
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 2012-02-21
      相关资源
      最近更新 更多