r: extrae todos los errores posibles en una función, no solo el primero

CorePress2024-01-25  9

En mi función siguiente, el elemento de entrada "a" arroja un error (como debería). Puedo detectar ese primer error silenciosamente usando try().

Pero me preguntaba si sería posible detectar TODOS los demás valores de entrada que produzcan un error (en el siguiente ejemplo, "b" también producirá un error).

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)


------------------------------------

También podríamos convertir a numérico, lo que cambia automáticamente los elementos no numéricos a NA

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



------------------------------------

Tal vez puedas usar tryCatch para manejar la condición de error y devolver NA para los valores de error y usar los valores de NA para identificar entradas erróneas.

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"

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare