Pregunta

¿Cómo depuro Rscripts que se ejecutan desde la línea de comandos?

Actualmente estoy usando el paquete getopt para pasar las opciones de la línea de comando, pero cuando hay un error, es difícil para mí:

  1. ver qué salió mal exactamente;
  2. depurar interactivamente en R (ya que el script espera opciones de línea de comando)

¿Alguien tiene un código de ejemplo y está dispuesto a compartir?

¿Fue útil?

Solución

Puede pasar sus argumentos de línea de comando a un shell interactivo con --args y luego obtener ('') el script.

$ R --args -v

R version 2.8.1 (2008-12-22)
Copyright (C) 2008 The R Foundation for Statistical Computing
ISBN 3-900051-07-0

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> require(getopt)
Loading required package: getopt
> opt = getopt(c(
+ 'verbose', 'v', 2, "integer"
+ ));
> opt
$verbose
[1] 1
> source('my_script.R')

Ahora podría usar la función del navegador antiguo () para depurar.

Otros consejos

O uso declaraciones impresas de la vieja escuela o análisis interactivo. Para eso, primero guardo el estado usando save () , y luego lo cargo en una sesión interactiva (para la cual uso Emacs / ESS). Eso permite el trabajo interactivo utilizando el código del script línea por línea.

Pero a menudo escribo / pruebo / depuro el código en modo interactivo primero antes de implementarlo en un script más pequeño.

Otra opción es trabajar con la funcionalidad de opciones (error). Aquí hay un ejemplo simple:

options(error = quote({dump.frames(to.file=TRUE); q()}))

Puede crear un script tan elaborado como desee en una condición de error, por lo que debe decidir qué información necesita para la depuración.

De lo contrario, si hay áreas específicas que le preocupan (por ejemplo, conectarse a una base de datos), envuélvalas en una función tryCatch ().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top