GNU R: Automation und dynamische Dokumenterstellung

Aus Wikibooks


Batchmode[Bearbeiten]

Mit R kann der gesamte Funktionsumfang auch automatisiert werden. Dazu wird lediglich eine Source-Datei mit Programmcode benötigt, die dann z.B. folgendermaßen unter LINUX zur Ausführung gebracht werden kann:

bash> R  --vanilla --save  < /verzeichnis/meine_sourcefile.r

Auf diese Weise lassen sich ohne komplizierte Navigation durch Menüs usw. aktuelle Graphiken erstellen oder Berechnungen durchführen und (z.B. via cron) automatisieren.

Dynamische Dokumenterstellung mit dem Paket (S-/odf-)Weave[Bearbeiten]

Statistiken sind kein Selbstzweck. Zumeist steht am Ende statistischer Auswertungen ein Bericht oder eine wie auch immer geartete Veröffentlichung der Ergebnisse. Mit dem Paket Sweave ist es möglich den Prozess der Statistischen Auswertung und der Dokumentation dieser Arbeit in einem Workflow zu behandeln. Die Idee ist, dass R-Befehle in ein Dokument eingefügt werden und durch statistische Auswertungen ersetzt werden. Dadurch lassen sich leicht aktualisierbare Berichte erstellen oder Forschungsarbeiten schon während der statistischen Auswertung erstellen. Sweave ist auch ein großer Schritt in Richtung replizierbarer statistischer Auswertungen, da sich Daten, Auswertungsprozeduren und Auswertungsergebnisse in einem Dokument ablegen lassen.

Derzeit ist dies für drei Dokumentformate möglich: .odf , .tex und html.

Open document Format (.odt) ist das Standardformat der freien Textverarbeitung Open Office bzw. LibreOffice

Tex ist ein relativ altes und etabliertes Textsatzsystem, das vom gewohnten What-you-see-is-what-you-get zu Gunsten des What-you-see-is-what-you-mean-Paradigmas abweicht. Text wird hier von Anweisungen und Tags umgeben, die dem System sagen, wie ein bestimmter Textteil zu setzen ist. Dadurch können während des Schreibens Layout-Fragen im Hintergrund bleiben.

odfWeave ist ein eigenes Paket, das (noch) nicht Teil der Standardinstallation ist und muss manuell nachinstalliert werden:
> install.packages("odfWeave", dependencies=TRUE)     
> library(utils)                 # Laden der neuinstallierten Pakete 
> library(odfWeave)

Sweave ist Teil des utils-Paketes und muss ggf. ebenfalls installiert werden.

Grundprinzipien dynamischer Dokumenterstellung[Bearbeiten]

Die Idee hinter (S)Weave ist folgende: Wir erstellen ein Dokument. An bestimmten Stelle geben wir eine Anweisung, dass eine Statistik oder Graphik eingefügt werden soll. Bei Bedarf lassen wir R das Dokument berechnen und erhalten ein Dokument mit Tabellen, Diagrammen usw.

Die Anweisungen an R werden bei Verwendung des Sweave-Pakets typischerweise in einer charakteristischen Form gegeben, die der Noweb-Syntax folgen. Dabei handelt es sich um Blöcke (genannt Chunks) mit folgender Syntax:

<<Blockname,Aufrufparameter,... >>=                 #1. Startteil

#R Befehle                                          #2. Anweisungen 
print(iris)

@                                                   #3. Schlussteil

Zu beachten ist die dreiteilige Struktur: Der Startteil hat die Form <<... >>= , der Anweisungsteil besteht aus gewöhnlichen R Befehlen und zum Schluss jedes Chunks steht als charakteristisches Erkennungszeichen ein @

R und Open Office[Bearbeiten]

Öffnen Sie ein Open-Office-Dokument, fügen Sie an einer beliebigen Stelle das folgende Chunk ein:

<<Unser_erster_Testoutput,echo=FALSE>>=                 
print(iris)        #Ausgabe des Datensatz iris
@                                                   

Speichern Sie das neu erstellte Dokument zum Beispiel unter dem Namen "roffice.odt".

In R können Sie jetzt mit dem Befehl

> odfWeave("/pfad/zur/datei/roffice.odt","/pfad/zur/datei/rofficeout.odt")

alle Chunks in dem Office Dokument roffice.odt durch die entsprechenden Berechnungen ersetzen lassen. In unserem Fall sollte das neu erstellte Dokument rofficeout.odt nach dem Öffnen in Open Office den Ausdruck des Iris-Datensatzes enthalten. Damit dürfte das wesentliche Prinzip deutlich geworden sein. Da Open Office auch problemlos in das derzeit noch verbreitete doc-Format exportieren kann, bietet odfWeave die entscheidende Schnittstelle für alle R-Nutzerinnen, die auf den Austausch mit Windows/MS Office-Produkten angewiesen sind.

Bleibt der Vollständigkeit halber noch der Parameter echo zu erklären. echo=TRUE hätte zur Folge gehabt, dass die Anweisung print(iris) mit in das Dokument rofficeout.odt geschrieben worden wäre.

R und Latex[Bearbeiten]

Zur Erzeugung von (La)Tex-Dokumenten geht man identisch vor wie bei odf-Dateien. In eine tex-Datei werden chunks integriert und in einem zweiten Schritt mit R durch die Ergebnisse ersetzt. Konventional enden Tex-Sweave-Dateien allerdings mit der Endung .Rnw (für R - Noweb) und statt odfWeave kommt Sweave zum Einsatz:

> Sweave("texfile.Rnw")

generiert die Datei "texfile.tex" im selben Verzeichnis. Diese kann dann mit Latex in verschiedenste Formate wie Postscript oder PDF gebracht werden.

Unter LINUX lässt sich der gesamte Arbeitsschritt folgendermaßen automatisieren:

bash> echo "library(\"utils\"); Sweave(\"/Pfad/Dateiname.Rnw\")" | R --no-save --no-restore  ;
bash> latex /Pfad/Dateiname.tex

Dynamische Webseiten mit R[Bearbeiten]

Das Paket R2HTML implementiert den Sweave-Workflow für Html-Seiten und ermöglicht damit weltweit abrufbare und automatisch aktualisierte statistische Auswertungen.

Ausblick[Bearbeiten]

So weit die grundlegende Funktionsweise von odfWeave und Sweave. Der eigentliche Clou ist jedoch sicher, dass auf diese Weise automatisiert Graphiken und formatierte Tabellen eingebunden werden können, was in Kürze in einem der nächsten Kapitel ausgeführt werden wird.

Bis dahin sind die entsprechenden Hilfeseiten zu empfehlen:

> ?Sweave
> ?odfWeave

(Und wer sich schon einarbeitet, kann natürlich auch diesen Artikel ergänzen. (-; )

Alternativen zu Sweave[Bearbeiten]

Abgesehen von Sweave gibt es heute auch noch "knitr". Mit diesem R-Package ist es ebenso möglich dynamische Dokumentenerstellung durchzuführen. Es erlaubt weiters mehr Einstellungsmöglichkeiten als Sweave.

> install.packages("knitr", dependencies=TRUE)

> library("knitr")

> knit("C:/Users/Pfad/zur/Datei.Rnw")

Durch die Installation von knitr und der weiteren Befehlskette wird aus einer *.Rnw-Datei eine *.tex-Datei erstellt, die dann beispielsweise unter Windows mit MikTeX via , zu einer *.pdf-Datei kompiliert werden kann. So ist ein durchgehender Arbeitsprozess gestaltbar.

Weblinks[Bearbeiten]


Inhaltsverzeichnis[Bearbeiten]