【问题标题】:Error handling with lapply -- output the index of failed elements使用 lapply 处理错误——输出失败元素的索引
【发布时间】:2016-01-20 18:45:52
【问题描述】:

Answer to question about error handling with lapply 在元素失败时总是返回NANULL,即

myfun <- function(s) {
  tryCatch(doSomething(s), error = function(e) { return(NULL) }
}

但是,这还不够通用,因为 doSomething(s) 可能会返回 NULLNA 本身。因此,理想情况下,我希望编写myfun,以便在lapply(mylist, myfun) 之后,我可以以某种方式获取失败元素的所有索引。如何做到这一点?

【问题讨论】:

    标签: r error-handling lapply


    【解决方案1】:

    通过identity() 处理错误来捕获和释放错误

    res = lapply(list(1, "two", 3), function(i) tryCatch({
        sqrt(i)
    }, error=identity)
    

    检查错误

    vapply(res, is, logical(1), "error")
    

    返回错误条件通常比返回“神奇”值(如 NANULL)更好,除非下游分析与返回的值无缝协作。

    作为更高级的解决方案,创建更精细的条件或扩展错误类

    my_condition = function(err)
        structure(list(message=conditionMessage(err),
                       original=err), class=c("my", "condition"))
    

    然后返回

    res <- lapply(list(1, "two", 3), function(i) {
        tryCatch({
            sqrt(i)
        }, error=my_condition)
    })
    

    【讨论】:

      猜你喜欢
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 2017-11-04
      • 2015-04-13
      相关资源
      最近更新 更多