Equivalente a & # 8220; lanzar & # 8221; en R
-
05-07-2019 - |
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.
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