Pregunta ¿Puede hacer que R imprima mensajes de error más detallados?


A menudo me he sentido frustrado por los mensajes de error críptico de R. No estoy hablando de una sesión interactiva, quiero decir cuando estás ejecutando un script. Los mensajes de error no imprimen números de línea, y a menudo es difícil rastrear la línea ofensiva y el motivo del error (incluso si puede encontrar la ubicación).

Más recientemente, mi script R falló con el mensaje increíblemente perspicaz: "Ejecución detenida". La forma en que suelo rastrear esos errores es poniendo muchas instrucciones de impresión en todo el script, pero esto es un problema. A veces tengo que pasar por el guión línea por línea en una sesión interactiva para encontrar el error.

¿Alguien tiene una mejor solución para hacer que la salida de error R sea más informativa?

EDITAR: Muchas cosas de depuración de R funcionan para sesiones interactivas. Estoy buscando ayuda en scripts de línea de comandos ejecutados a través de Rscript. No estoy en el medio de una sesión R cuando ocurre el error, estoy en el shell bash. No puedo ejecutar "traceback ()"


32
2017-09-20 12:56


origen


Respuestas:


Pruebe algunas de las sugerencias en esta publicación:

Sugerencias generales para la depuración en R

Específicamente, findLineNum() y traceback()/setBreakpoint().


8
2017-09-20 13:05



@Nathan: agrega esta línea sink(stdout(), type="message") al comienzo de la secuencia de comandos y debe obtener en el mensaje de la consola tanto el contenido del script como la salida junto con un mensaje de error para que pueda verlo en modo interactivo en la consola. (También puede redirigir a un archivo de registro si prefiere mantener la consola "limpia")


1
2017-09-20 19:24



Mira esto mi paquete tryCatchLog (https://github.com/aryoda/tryCatchLog)

Si bien es imposible mejorar los mensajes de error R directamente, puede ahorrar mucho tiempo al identificar la línea de código exacta del error y tener las variables reales en el momento del error almacenado en un volcado para el análisis "post mortem".

Las principales ventajas de la tryCatchLog funcionar sobre tryCatch son

  • fácil registro de errores, advertencias y mensajes en un archivo o consola
  • las advertencias no detienen la ejecución del programa (tryCatch detiene la ejecución si pasa una función de controlador de advertencia)
  • identifica la fuente de errores y advertencias al iniciar sesión seguimiento de la pila con una referencia al nombre del archivo fuente y al número de línea (dado que el rastreo no contiene el seguimiento completo de la pila)
  • permite análisis post-mortem después de errores al crear un archivo de volcado con todas las variables del entorno global (espacio de trabajo) y cada función llamada (a través de dump.frames): ¡muy útil para trabajos por lotes que no se pueden depurar directamente en el servidor para reproducir el error!

0
2018-02-18 22:51



Una forma de acceder al script para obtener más información sobre dónde se produjo el error es redirigir el mensaje R a la misma secuencia de errores:

sink(stdout(), type="message") 

De esta forma, obtienes mensajes y errores en la misma salida para que veas qué línea generó el error ...


-1
2017-09-20 15:53