Pregunta

¿Cómo se lanza " " " un error en R? Tengo una función que toma un marco de datos y algunos nombres de columna y hace cosas con ellos. Si las columnas no existen, quiero que la función se detenga y que detenga todas las funciones en función de ella.

He visto recover y browse y traceback pero, bueno, parecían estar cerca pero no es lo que estoy buscando.

¿Fue útil?

Solución

Ver help (tryCatch) :

  

Las condiciones son señaladas por   ' signalCondition '. Además, el
  Las funciones ' stop ' y ' warning ' tienen   ha sido modificado para aceptar también
  condicionar los argumentos.

y más adelante en "Ver también":

  Las condiciones de señal de

' stop ' y ' warning ', y ' try ' es esencialmente una    versión simplificada de ' tryCatch '.

así que probablemente quieras detener .

Otros consejos

Ejemplo simple:

f <- function(a, b){ 

    if (a == 0){ 
            stop("error message")
    }
 }

Más allá de las funciones básicas que menciona Dirk:

El paquete R.oo tiene una excepción adicional Funcionalidad de manejo, incluyendo una función throw () que es muy útil. Puede detectar excepciones con las funciones habituales try o trycatch:

> try(throw("Division by zero.")); print("It's ok!");
Error: [2009-10-22 10:24:07] Exception: Division by zero.
[1] "It's ok!"

Puede obtener más información al respecto aquí: http: //www1.maths .lth.se / help / R / R.oo /

En realidad, la función stopifnot es muy conveniente para implementar controles de seguridad en su código. Toma varias expresiones lógicas y devuelve un error si alguna de ellas se evalúa como falsa.

Ejemplo: Para verificar si la columna 'c' existe en el marco de datos 'df':

df <- data.frame(a = numeric(), b = numeric())
stopifnot(!is.null(df$c))

Esto lanzará el siguiente error:

Error: !is.null(df$c) is not TRUE

Puedes verificar si la columna existe y hacer lo que quieras.
Supongamos que un data.frame llamado df1 y compruebe si existe la columna col1 :

if(! any(grepl('^col1

o

if(! any(grepl('^col1

Por ejemplo

,colnames(df1)))) stop("nonexistent column")

o

<*>

Por ejemplo

,colnames(df1)))) return(-1)

Por ejemplo

,colnames(df1)))) stop("nonexistent column")

o

<*>

Por ejemplo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top