Exécution d'un script R ligne par ligne

8

Je viens de découvrir comment exécuter un script R à partir de la console R sous Windows.

source("arrrFile.R")

Le problème est que cette commande s'exécute "en silence". Comment puis-je exécuter le fichier commande par commande comme je le taperais dans la console?

Fabien
la source
5
As-tu essayé source("arrFile.R", echo=TRUE)?
caracal
(+1) @caracal, en quelque sorte manqué cette option :) pas besoin de mettre printdans le fichier source, sauf si certaines sorties ne sont pas intéressantes.
Dmitrij Celov

Réponses:

16

Vous pouvez utiliser le débogueur intégré de R; il doit être déclenché sur une fonction, donc un petit wrapper est nécessaire:

sourceDebugging<-function(f){
 #Function to inject the code to
 theCode<-function(){}
 #Injection
 parse(text=c('{',readLines(f),'}'))->body(theCode)
 #Triggering debug
 debug(theCode)
 #Lift-off
 theCode()
}
sourceDebugging(<file with code>)

Ceci est assez pratique pour le débogage (vous donne la possibilité d'inspecter l'état après chaque ligne), cependant, n'évaluera que dans un nouvel environnement theCodeau lieu de celui sourcepar défaut .GlobalEnv... cela signifie par exemple que les variables faites à l'intérieur disparaîtront à moins que explicitement mondialisé.

L'option deux consiste simplement à émuler l'écriture à partir du clavier et à appuyer sur ENTER ... mais comme caracal l'a souligné, cela peut être réalisé simplement par source(<file with code>,echo=TRUE).


la source
(+1) il est également recommandé d'écrire les fichiers source en tant que fonctions et debug() browser()sont ensuite utiles :)
Dmitrij Celov
1
également vanilla, montre comment une commande s'exécute ligne par ligne R-2.12 --vanilla <yourfile.R
user4581
1
une méthode pour passer aussi des paramètres?
gc5
Il semble que les nombres soient décalés de 1 en raison de la définition de la fonction. Y a-t-il un moyen intelligent de contourner cela?
irritable_phd_syndrom
10

Ouvrez le fichier de script à l'intérieur de votre RGui et appuyez sur Ctrl + R pour exécuter ligne par ligne (vous devez cependant appuyer plusieurs fois;)). Cependant, je recommanderais d'utiliser RStudio pour le travail pratique avec R. Dans ce cas, vous exécutez la ligne par Ctrl + Entrée . Ou vous pouvez modifier votre script pour print()(ou cat()) les objets.

Dmitrij Celov
la source