7 votes

déboguer les scripts littéraux

Comment puis-je déboguer Rscripts qui sont exécutées à partir de la ligne de commande ?

J'utilise actuellement le getopt pour passer des options en ligne de commande, mais quand il y a un bogue, il m'est difficile de le faire :

  1. pour voir ce qui a mal tourné ;
  2. déboguer de manière interactive dans R (puisque le script s'attend à des options de ligne de commande).

Quelqu'un a-t-il des exemples de code et souhaite-t-il les partager ?

7voto

Mark Points 33086

Vous pourriez passer vos arguments de ligne de commande dans un shell interactif avec --args et ensuite source('') le 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')

Vous pouvez maintenant utiliser l'ancienne fonction browser() pour déboguer.

4voto

Dirk Eddelbuettel Points 134700

J'utilise soit les instructions d'impression de la vieille école, soit l'analyse interactive. Pour cela, j'enregistre d'abord l'état en utilisant save() puis de le charger dans une session interactive (pour laquelle j'utilise Emacs/ESS). Cela permet un travail interactif en utilisant le code script sur une base ligne par ligne.

Mais je commence souvent par écrire/tester/déboguer le code en mode interactif avant de le déployer dans un petit script.

3voto

Shane Points 40885

Une autre option consiste à travailler avec la fonctionnalité options(error). Voici un exemple simple :

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

Vous pouvez créer un script aussi élaboré que vous le souhaitez sur une condition d'erreur, donc vous devriez juste décider des informations dont vous avez besoin pour le débogage.

Sinon, si certains domaines spécifiques vous préoccupent (par exemple, la connexion à une base de données), intégrez-les dans une fonction tryCatch().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X