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"