【问题标题】:Extract all possible errors in a function not just the first one提取函数中所有可能的错误,而不仅仅是第一个错误
【发布时间】:2021-06-24 14:48:58
【问题描述】:

在我下面的函数中,输入元素"a" 会引发错误(应该如此)。我可以使用try() 静默捕捉第一个错误。

但是,我想知道是否有可能捕获所有其他产生错误的输入值(在下面的示例中 "b" 也会产生错误)?

foo <- function(x){
  
  lapply(x, function(i) i+1)
}

# EXAMPLE OF USE:
foo(list(1, "a", "b", 2))

try(foo(list(1, "a", "b", 2)), silent = T)

【问题讨论】:

    标签: r function error-handling


    【解决方案1】:

    我们还可以转换为numeric,它会自动将非数字元素更改为NA

    foo <- function(x) suppressWarnings(lapply(x, function(i) as.numeric(i) + 1))
    foo(list(1, "a", "b", 2))
    

    【讨论】:

      【解决方案2】:

      也许您可以使用tryCatch 来处理错误情况并返回NA 以获得错误值并使用NA 值来识别错误输入。

      foo <- function(x){
        lapply(x, function(i) tryCatch(i+1, error = function(e) NA))
      }
      
      val <- list(1, "a", "b", 2)
      result <- foo(val)
      error_input <- val[is.na(result)]
      
      result
      #[[1]]
      #[1] 2
      
      #[[2]]
      #[1] NA
      
      #[[3]]
      #[1] NA
      
      #[[4]]
      #[1] 3
      
      error_input
      #[[1]]
      #[1] "a"
      
      #[[2]]
      #[1] "b"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-24
        • 1970-01-01
        • 1970-01-01
        • 2019-05-06
        相关资源
        最近更新 更多