如何在R中的for循环中仅跳过特定类型的错误?

时间:2019-07-15 07:46:59

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

我正在遍历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){})
}

1 个答案:

答案 0 :(得分: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捕获了错误消息,因此您可以对其进行评估并采取相应措施。

要使其不执行任何操作,只需在条件为真时“不执行任何操作” {}