Ausführen eines R-Skripts zeilenweise

8

Ich habe gerade herausgefunden, wie man ein R-Skript über die R-Konsole unter Windows ausführt.

source("arrrFile.R")

Das Problem ist, dass dieser Befehl "still" ausgeführt wird. Wie kann ich die Datei Befehl für Befehl so ausführen, wie ich sie in die Konsole eingeben würde?

Fabian
quelle
5
Hast du es versucht source("arrFile.R", echo=TRUE)?
Caracal
(+1) @caracal, habe diese eine Option irgendwie verpasst :) Keine Notwendigkeit, sie printin die Quelldatei einzufügen, es sei denn, eine Ausgabe ist nicht interessant.
Dmitrij Celov

Antworten:

16

Sie können den integrierten Debugger von R verwenden. Es muss für eine Funktion ausgelöst werden, daher wird ein kleiner Wrapper benötigt:

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>)

Dies ist sehr praktisch für das Debuggen (gibt Ihnen die Möglichkeit, den Status nach jeder Zeile zu überprüfen), wird jedoch nur in einer neuen Umgebung theCodeanstelle der sourceStandardeinstellung ausgewertet. .GlobalEnvDies bedeutet beispielsweise, dass die darin erstellten Variablen verschwinden, es sei denn explizit globalisiert.

Option zwei besteht nur darin, das Schreiben von der Tastatur zu emulieren und die EINGABETASTE zu drücken ... aber wie Caracal betonte, kann dies nur durch erreicht werden source(<file with code>,echo=TRUE).


quelle
(+1) Es ist auch empfehlenswert, die Quelldateien als Funktionen zu schreiben und dann debug() browser()hilfreich zu sein :)
Dmitrij Celov
1
auch Vanille, zeigt, wie ein Befehl Zeile für Zeile R-2.12 --vanilla <yourfile.R
user4581
1
Gibt es eine Methode, um auch Parameter zu übergeben?
GC5
Es scheint, dass die Zahlen aufgrund der Funktionsdefinition um 1 versetzt sind. Gibt es einen klugen Weg, das zu umgehen?
irritable_phd_syndrom
10

Öffnen Sie die Skriptdatei in Ihrem RGui und drücken Sie Strg + R , um Zeile für Zeile auszuführen (Sie müssen jedoch mehrmals drücken;)). Ich würde jedoch empfehlen, RStudio für die bequeme Arbeit mit R zu verwenden. In diesem Fall führen Sie die Zeile mit Strg + Eingabetaste aus . Oder Sie können Ihr Skript an print()(oder cat()) die Objekte anpassen.

Dmitrij Celov
quelle