Question

Comment déboguer Rscripts exécutés à partir de la ligne de commande?

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

  1. voyez ce qui s'est exactement passé de travers;
  2. déboguez de manière interactive dans R (car le script attend des options de ligne de commande.)

Quelqu'un a-t-il un exemple de code et est-il prêt à partager?

Était-ce utile?

La solution

Vous pouvez passer vos arguments de ligne de commande dans un shell interactif avec --args, puis 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.

Autres conseils

Je me sers soit des déclarations d’impression d’ancienne école, soit de l’analyse interactive. Pour cela, je commence par sauvegarder l'état en utilisant save () , puis je le charge dans une session interactive (pour laquelle j'utilise Emacs / ESS). Cela permet un travail interactif en utilisant le code de script ligne par ligne.

Mais j'écris / teste / débogue souvent le code en mode interactif avant de déployer dans un script plus petit.

Une autre option consiste à utiliser la fonctionnalité options (erreur). 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 en cas d'erreur. Vous devez donc choisir les informations dont vous avez besoin pour le débogage.

Sinon, si des zones spécifiques vous préoccupent (par exemple, la connexion à une base de données), enveloppez-les dans une fonction tryCatch ().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top