2011-06-17 12 views
7

Tengo una secuencia de comandos elaborada que abarca múltiples funciones (y archivos). Para fines de depuración necesito incrustar browser llamadas en todo tipo de rincones y grietas. Cuando presumiblemente corrijo algo, quiero ejecutarlo todo sin depuración, evitando evitar las llamadas browser porque comentar todas las llamadas al navegador significaría un esfuerzo considerable de mi parte. @mdsumner en R chat sugirió ejecutar el script en modo no interactivo (es decir, usando Rscript.exe en Windows), pero me beneficiaría que lo haga en mi consola, para poder acceder, por ejemplo, al traceback. Revisé los documentos del navegador y no encuentro ninguna opción que se acerque a lo que estoy tratando de lograr. ¿Alguna sugerencia?evitando las llamadas al navegador en R

+1

Eche un vistazo a las respuestas a esta pregunta muy similar que se publicó recientemente: http://stackoverflow.com/q/6286092/602276 – Andrie

+0

Utilizaré 'options (debug =" FALSE ")' y dentro de una función : 'if (options (" debug ")) browser()'. ¡Gracias! –

+1

envuelve eso dentro de una definición de función llamada 'dbrowser' y reemplaza todas tus llamadas de navegador() con dbrowser() - en lugar de reemplazarlas con if (opciones) -browser two-liner. – Spacedman

Respuesta

8

Éstos son tres possibliities:

1) Sobrescribir el comando del navegador. Añadir este comando a su espacio de trabajo global para convertir los comandos del explorador fuera:

browser <- list 

y para volver a encenderla

rm(browser) 

Este es probablemente el más fácil, pero es un poco feo debido a la browser variable que se está dejado en el ambiente global.

Las siguientes dos soluciones son un poco más largas pero usan opciones para que no se introduzcan nuevas variables en el entorno global. También son tales que si no se configuran las opciones, entonces no se realiza la depuración, por lo que solo tiene que establecer una opción si desea depuración. La solución if puede ser más rápida que la solución expr, aunque es probable que no sea material.

2) Utilice expr = argumento con la opción. Reemplazar cada comando navegador con:

browser(expr = isTRUE(getOption("Debug"))) 

y luego definir la opción "Debug" ser TRUE a activar la depuración.

options(Debug = TRUE) 

o configurarlo a otra cosa o quitarlo para activar la depuración de apagado:

options(Debug = NULL) 

3) uso si con una opción. Reemplazar cada comando navegador con:

if (isTRUE(getOption("Debug"))) browser() 

y luego establecer la opción Debug o no como en el punto anterior.

+0

Todos los buenos comentarios de Michael y Marek, pero estoy eligiendo este como el correcto, ya que tiene una visión general de tres métodos. –

2

Creo que esto solo se reduce al uso matizado de una función de depuración. Si desea controlar de forma selectiva el uso de browser(), colóquelo dentro de un if que le permite habilitar o deshabilitar la depuración de la función. Cuando desee navegador para ser llamado, hacen que explícita como

myfun(x, debug = TRUE) 
4

Definir valor lógico mundial

debug_mode <- TRUE 

y entonces en vez de browser() uso

if (debug_mode) browser() 
Cuestiones relacionadas