2013-02-03 11 views
5

Desidero ottenere NA quando una funzione restituisce un errore anziché il codice di arresto.Catch un errore producendo NA

Attualmente uso

try.test<-try(results<-lm(log(0)~1)) 
if(class(try.test)=="try-error"){results<-NA} 

Ho anche provato a giocare con TryCatch.

Mi piacerebbe trovare una soluzione singola/linea.

risposta

12

Prova

result <- tryCatch(lm(log(0)~1), error=function(err) NA) 

Ma questa cattura tutti gli errori, non solo quelli da log (0).

4

Un modo meno che elegante, ma ugualmente breve di risolvere il tuo problema.

results <- NA 
try(results<-lm(log(0)~1), silent = TRUE) 

Se siete alla ricerca di un modo elegante per gestire gli errori, vi consiglio di guardare nel concetto di una monade; l'uso di queste strutture riduce la quantità di "if (! na (x)) ...." nei tuoi script.