Buenos días, Quiero hacer una función con un "if", que si devuelve un error dentro de él se pare la ejecución de la función devolviendo un valor. El código que tengo, para las pruebas, es el siguiente: prueba<-function(a){ b<-"no ha hecho stop" c<-"hago el stop" if(a<3){ variable<-"hola" tryCatch({ write("entro en el tryCatch","") d<-variable*3 },error=function(e){ return(c) stop(write("ha dado error","")) }) }else{ b<-a*a*a } return (b) } prueba(2) La salida que me devuelve R por pantalla es: entro en el tryCatch [1] "no ha hecho stop" Cuando la que yo quiero es: entro en el tryCatch ha dado error [1] "hago el stop" Es decir que me saque por pantalla el mensaje que tengo en el stop y que la salida de la función sea la variable c. Muchas gracias por vuestra ayuda. Un saludo
Hola, Mira esta referencia sobre cómo usar "tryCatch()": http://www.win-vector.com/blog/2012/10/error-handling-in-r/ Saludos, Carlos Ortega El 28 de mayo de 2015, 10:50, Sergio Castro < castro.rodriguez.sergio en gmail.com> escribió:> Buenos días, > > Quiero hacer una función con un "if", que si devuelve un error dentro > de él se pare la ejecución de la función devolviendo un valor. El > código que tengo, para las pruebas, es el siguiente: > > prueba<-function(a){ > b<-"no ha hecho stop" > c<-"hago el stop" > if(a<3){ > variable<-"hola" > tryCatch({ > write("entro en el tryCatch","") > d<-variable*3 > },error=function(e){ > return(c) > stop(write("ha dado error","")) > }) > }else{ > b<-a*a*a > } > return (b) > } > > prueba(2) > > La salida que me devuelve R por pantalla es: > > entro en el tryCatch > [1] "no ha hecho stop" > > Cuando la que yo quiero es: > > entro en el tryCatch > ha dado error > [1] "hago el stop" > > Es decir que me saque por pantalla el mensaje que tengo en el stop y > que la salida de la función sea la variable c. > > Muchas gracias por vuestra ayuda. > > Un saludo > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Muchas gracias, Eso me ayuda en casi todo lo que necesito, a excepción del return. Si meto un return dentro del error, falla y sale del tryCatch, siguiendo con la ejecución. Mi flujo es el siguiente: Tengo una función A que llama a la función B. En la función B tengo el tryCatch. Si se produce un error en B, que lo tengo controlado por el tryCatch, quiero devolver un valor KO a la función A y parar la ejecución de B en ese punto. Un saludo. El día 28 de mayo de 2015, 13:30, Carlos Ortega <cof en qualityexcellence.es> escribió:> Hola, > > Mira esta referencia sobre cómo usar "tryCatch()": > > http://www.win-vector.com/blog/2012/10/error-handling-in-r/ > > Saludos, > Carlos Ortega > > El 28 de mayo de 2015, 10:50, Sergio Castro > <castro.rodriguez.sergio en gmail.com> escribió: >> >> Buenos días, >> >> Quiero hacer una función con un "if", que si devuelve un error dentro >> de él se pare la ejecución de la función devolviendo un valor. El >> código que tengo, para las pruebas, es el siguiente: >> >> prueba<-function(a){ >> b<-"no ha hecho stop" >> c<-"hago el stop" >> if(a<3){ >> variable<-"hola" >> tryCatch({ >> write("entro en el tryCatch","") >> d<-variable*3 >> },error=function(e){ >> return(c) >> stop(write("ha dado error","")) >> }) >> }else{ >> b<-a*a*a >> } >> return (b) >> } >> >> prueba(2) >> >> La salida que me devuelve R por pantalla es: >> >> entro en el tryCatch >> [1] "no ha hecho stop" >> >> Cuando la que yo quiero es: >> >> entro en el tryCatch >> ha dado error >> [1] "hago el stop" >> >> Es decir que me saque por pantalla el mensaje que tengo en el stop y >> que la salida de la función sea la variable c. >> >> Muchas gracias por vuestra ayuda. >> >> Un saludo >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es en r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es