values rotate hoverinfo change r error-handling

rotate - r plotly axis format



¿Puede hacer que R imprima mensajes de error más detallados? (4)

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 ()"


@Nathan: bien agregue este sink(stdout(), type="message") línea sink(stdout(), type="message") al comienzo del script y debe obtener en el mensaje de consola tanto el contenido del script como su 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")


Eche un vistazo a 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 función tryCatch 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 el origen de los errores y las advertencias al registrar un seguimiento de la pila con una referencia al nombre del archivo de origen y al número de línea (ya que el rastreo no contiene el seguimiento completo de la pila)
  • permite el análisis post mortem después de errores creando un archivo de volcado con todas las variables del entorno global (área de trabajo) y cada función llamada (a través de dump.frames) - muy útil para trabajos por lotes que no se pueden depurar en el servidor directamente para reproducir el error !

Pruebe algunas de las sugerencias en esta publicación:

Sugerencias generales para la depuración en R

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


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 ...