【问题标题】:How to skip only a specific type of error in for-loop in R?如何在 R 的 for 循环中仅跳过特定类型的错误?
【发布时间】:2019-11-23 21:29:41
【问题描述】:

我正在循环读取 read_xlsx(来自 readxl 库)以读取 excel 中的多张工作表。但是,如果工作表(用某个名称指定 - 在下面的示例中为“缺失”)不存在的错误,我希望它被忽略并且循环应该继续。但同时,如果有任何其他错误(比如与计算有关),那么在停止循环时不应忽略并作为错误抛出。如何做到这一点?

注意:我使用了 tryCatch / try;他们都忽略了所有类型的错误(从this 答案中学习)。

sheets=c("name1","name2","missing","name3")  
for (k in sheets) {
    tryCatch({temp=read_xlsx("someexcel.xlsx",sheet = k,col_names = F)
    some_calc=mean(temp[1,])},error=function(e){})
}

【问题讨论】:

    标签: r for-loop error-handling try-catch


    【解决方案1】:

    你可以试试这个:

    test <- function(x) {
      tryCatch(x,
               error = function(e) {if(conditionMessage(e) == "It's an error") {print("no problem")
                                   } else {
                                       stop("It's another error")}
                                                                     })
    }
    
    > test(stop("It's an error"))
    [1] "no problem"
    
    > test(stop("Mayday mayday"))
     Error in value[[3L]](cond) : It's another error 
    
    

    conditionMessage 捕获错误消息,因此您可以对其进行评估并采取相应措施。

    当条件为真时,它什么都不做就“什么也不做”{}

    【讨论】:

    • 太棒了!工作完美。只需使用循环变量自定义错误。只是一件小事。在 else 部分,如何确保显示原始错误(如果没有 tryCatch 会抛出)而不是(或除此之外)自定义错误?
    • 太棒了!只需在 else 内执行 stop(conditionMessage(e)) 即可。
    • 忽略!得到了答案。刚刚添加了条件消息(e)。工作。
    猜你喜欢
    • 2018-12-21
    • 2015-08-20
    • 2013-01-22
    • 1970-01-01
    • 2014-08-30
    • 2020-09-12
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多