2010-09-06 8 views
6

Encontré esto post desde hace un año, y estoy usando R version 2.11.1 (2010-05-31), pero sigo recibiendo mensajes de error sin números de línea.R números de línea de script en el error?

¿Alguna solución?

+0

Recibo mensajes de error con números de línea. ¿Cómo estás cargando tus scripts? – Shane

+0

@Shane Estoy usando Rscript. ¿Cómo estás cargando tus scripts? –

+0

Estoy usando source() desde la GUI de Windows. – Shane

Respuesta

6

Las respuestas dadas siguen siendo válidas. Devolver números de línea de un script no es tan simple, pero R puede darle mucha más información sobre dónde se puede encontrar el error.

Usted podría utilizar las opciones de error para guardar la información en un archivo, por ejemplo:

options(error = quote({ 
    sink(file="error.txt"); 
    dump.frames(); 
    print(attr(last.dump,"error.message")); 
    traceback(); 
    sink(); 
    q()})) 

La función findLineNum() podría utilizarse si tiene el nombre del archivo en algún lugar disponible. Si usted tiene el mensaje de error, podría hacer algo como:

dump.frames() 
x <- attr(last.dump,"error.message") 
ll <- gsub("Error in (.*) : .*","\\1",x) 
lln <- findLineNum(srcfile,ll) 
+6

+1 Gracias, es decepcionante que todavía no se haya implementado por defecto en R. Me parece una característica muy deseable. –

+0

Esto no ayuda si el error está en el nivel superior de un script R. –

0

En la próxima R 2.14, el equipo central está avanzando hacia la implementación de esta función. Las funciones en scripts cargados con source(file=..., keep.file=TRUE) contendrán un atributo srcref, que identifica el rango de caracteres que corresponde a la definición de la función en una copia en memoria del archivo fuente almacenado como un objeto de la clase srcfilecopy.

Esto no proporciona inmediatamente depuración a nivel de línea, pero le permite obtener números de línea aproximados si está dispuesto a ensuciarse las manos. Además, es progreso.

Cuestiones relacionadas