Visual debugging mit R – Eine kurze Einführung zur Fehlerdiagnose mit StatET und RStudio

This post was kindly contributed by eoda, R und Datenanalyse » R - go there to comment and to read the full post.

Debugging in R

Um Fehler in R-Funktionen und Skripten zu diagnostizieren und aufzufinden, stellt R unter anderem die Funktion debug() zur Verfügung, die wie im folgenden Beispiel angewendet werden kann:

Anwendung der Funktion debug ()

Anwendung der Funktion debug()

Nach Ausführen der Zeilen 8 und 9 gelangt man in der Konsole  in den Browser-Modus, welcher mittels der folgenden Befehle die schrittweise Ausführung der Funktion ermöglicht.

Übersicht der Befehle zur Ausführung der Funktion im Browser-Modus

Übersicht der Befehle zur Ausführung der Funktion im Browser-Modus

Der Debug-Browser lässt sich zudem an beliebiger Stelle im Skript durch die Funktion browser()aufrufen.

Visual debugging mit StatET (Eclipse) & RStudio

R-Entwicklungsumgebungen wie StatET oder seit der aktuellen preview Version 0.98 auch RStudio bieten darüber hinaus einen visual debug Modus, durch den zusätzliche Funktionalitäten zur Fehlerdiagnose bereit gestellt werden.

BREAKPOINTS

Alternativ zu dem zuvor beschriebenen Vorgehen, kann der Debug Modus in beiden IDE’s durch setzen eines Breakpoints im Scource-Skript angesprochen werden. Durch Klicken auf die Zeilennummer, lassen sich breakpoints innerhalb von Funktionen oder top-level Breakpoints an beliebiger Stelle im Skript setzen, die zum Beispiel ausgelöst werden, wenn das Skript mittels der source() Funktion ausgeführt wird.

Hierbei ist zu beachten, dass das Skript zunächst „gesourced“ werden muss, damit die Breakpoints aktiv sind. Die StatET Konsole muss zudem im Debug-Modus gestartet werden.

Debugger

Durch Erreichen eines Breakpoints oder einer entsprechenden R-Funktion wird der Debug-Modus automatisch gestartet. Dieser weist in beiden Entwicklungsumgebungen vergleichbare Funktionalitäten auf.

Ansicht in RStudio

Ansicht in RStudio

Ansicht in StatET

Ansicht in StatET

Konsole (1)

Startet man den visual debugger unter RStudio, erscheint innerhalb der Konsole eine zusätzliche Schaltfläche, welche Buttons zur Navigation im Debug-Modus bereit stellt. Diese entsprechen den R-Befehle n,c und Q, die man auch in StatET nutzt.

Scource-Skript (2)

Der Ausdruck der im nächsten Schritt (n) ausgewertet wird, wird hervorgehoben.

Environment (3)

Entsprechend der Anzeige des .GlobalEnv bei inaktivem Debug-Modus, werden in dem Tab Environment beziehungsweise Variables in StatET, die Objekte und ihre Werte, die ausschließlich innerhalb der derzeit Ausgeführten Funktion sichtbaren  sind, angezeigt (hier bar()).

Traceback (4)

Im Debug-Modus wird ein zusätzlicher Tab Traceback geöffnet. Hier werden alle derzeit aktiven Funktionen aufgelistet, analog zu dem Browser Befehl where. Darüber hinaus, wird die Funktion welche aktuell diagnostiziert wird hervorgehoben und durch klicken auf eine der Funktionen im Stack, wird das entsprechende Environment angezeigt.

Bedingte Breakpoints

StatET bietet zudem einen weiteren Tab Breakpoints, über den zusätzliche Breakpoint-Optionen gesetzt werden können.

Setzen von Breakpoint-Optionen bei StatET

Setzen von Breakpoint-Optionen bei StatET

Neben dem deaktivieren/aktivieren einzelner oder aller Breakpoints, lassen sich beliebige R-Expressions als Bedingung für das Auslösen eines Breakpoints definieren. Liefert die Bedingung einen Wahrheitswert (TRUE / FALSE), wird der entsprechende Punkt aktiviert, beziehungsweise übersprungen.

Möchte man mit RStudio bedingte Breakpoints setzen, lässt sich dies derzeit nur direkt über die R-Funktionen browser(expr),beziehungsweise  if(expr) debugonce(fun)für top-level Breakpoints realisieren:

Fazit

R verfügt durch die debugging Funktionen über gute Möglichkeiten R-Skripte zu Diagnostizieren. Durch die Integration in einen visual Debugger, wird dieser Prozess zusätzlich wesentlich erleichtert. Vor allem das Hervorheben des aktuell ausgeführten Ausdrucks und die Anzeige des zugehörigen workspaces helfen dabei, Fehler leichter zu identifizieren und den Code besser zu verstehen. Mit der neusten Version hat nun auch RStudio einen visual debugger in seine Entwicklungsumgebung integriert, der bereits in der Preview Version ein beinahe gleichwertiges  Tool zu dem seit längerem bewährten Eclipse/StatET Debugger ist.