image image


Worknote: Literate Programming mit RStudio und R

image

Eines der interessatesten R-Pakete speziell für die Arbeit mit RStudio ist knitr, das eine dynamische Prozeßdokumentation erlaubt. Damit sind so etwas wie Notebooks, bekannt aus Mathematica, Sage oder Maxima, möglich, die ein literate programming ermöglichen. knitr erlaubt einen Output nach LaTeX/PDF und nach HTML (via Markdown).

Für den Export nach HTML nutzt knitr R Markdown, ein Markdown-Superset, das neben John Grubers Original-Markdown auch die Erweiterungen der Sundown Bibliothek kennt. R Markdown wird in RStudio direkt unterstützt.

knitr ist nach der Installation und dem Neustart von RStudio sofort einsatzfähig. Mit File -> New -> R Markdown legt man sich im Editor eine neues R Markdown Dokument an, das mit einem minimalen Beispielcode hochkommt.

Ich habe als Beispiel mal eine abgespeckte Variante des Rössler-Attraktors als R Markdown Dokument angelegt:

## R Markdown Test

Dies ist ein **R Markdown Dokument**. Markdown ist eine einfache Auszeichnungssprache, die das Erstellen von HTML-Dokumenten vereinfacht.

Beim Klick auf das *»Knit HTML«*-Knöpfchen oben in der Leiste wird eine HTML-Seite mit dem Quellcode wie auch dem evaluierten R-Code herausgeschrieben:

```{r}
require(deSolve)
require(scatterplot3d)
```

Und jetzt definieren wie die Funktion ([Rössler-Attraktor](http://blog.schockwellenreiter.de/essays/roesslerr.html))

```{r}
Roessler <- function(t, state, parameters) {
  with(as.list(c(state)), {

    dx <- -y - z
    dy <- x + 0.25*y
    dz <- 0.28 + x*z - 5.8*z

    list(c(dx, dy, dz))
  })
}
```

Nun werden ein paar Variablen belegt und die Differentialgleichung berechnet:

```{r}
state <- c(x = 1, y = 0.2, z = 0)
times <- seq(0, 500, 0.01)
out   <- as.data.frame(ode(state, times, Roessler, 0))
```

Danach lassen uns das Ergebnis zeichnen:

```{r}
scatterplot3d(out$x, out$y, out$z, type = "l",
              main = "Rössler-Attraktor", xlab = "x", ylab = "",  zlab = "z",
              grid = TRUE, box = TRUE)
```

Wie man sieht, ist das ein ganz normales Markdown-Dokument, nur daß die Codeblöcke in einer Fences-Klammer (drei Backticks: »```«) eingebunden werden, wobei am Anfang in einem geschweiften Klammerpaar die Programmiersprache (hier {r})`mit optionalen Argumenten stehen muß.

Der Clou ist, daß von dem R-Code sowohl der Quellcode (mit ein wenig Syntax Coloring) wie auch ein eventueller Konsolen- oder Graphik-Output angezeigt wird.

Die Seite (die Datei muß beim Abspeichern die Endung .Rmd bekommen) wird nach HTML gerendert, indem man das Knöpfchen Knitr HTML in der Titelleiste klickt. Sie öffnet sich dann in einem Preview-Fenster (siehe Screenshot).

Herausgeschrieben wird ein Standalone-HTML-Dokuement, die Stylesheets, JavaScript und selbst die Bilder (als Base64) sind in dieser Datei integriert, so daß Ihr für die Verbreitung nur dieses eine Dokument benötigt.

Ideen

R Markdown resp. knitr paßt natürlich wunderbar in meine World Markdown-Überlegungen. Neben RStudio gibt es schon Anpassungen für den Emacs und für Lyx. Warum sollte es daher nicht möglich sein, das Paket auch in RubyFrontier zu integrieren1? Still diggin’!


   



  1. Hier zeigt sich allerdings das Problem der unterschiedlichen Markdown-Dialekte. Zwar kennt auch kramdown fenced Code-Blöcke, aber sie werden durch die Tilde (~) eigenzäunt, nicht durch Backticks. Als einen ersten Schritt müßte man daher neben kramdown auch R Markdown in RubyFrontier einbauen und sich dann einigen, welchen Markdown-Dialekt man verwenden will.

(Kommentieren)  Literate Programming mit RStudio und R bitte flattrn




Über …

Der Schockwellenreiter ist seit dem 24. April 2000 das Weblog digitale Kritzelheft von Jörg Kantel (Neuköllner, EDV-Leiter, Autor, Netzaktivist und Hundesportler — Reihenfolge rein zufällig). Hier steht, was mir gefällt. Wem es nicht gefällt, der braucht ja nicht mitzulesen. Wer aber mitliest, ist herzlich willkommen und eingeladen, mitzudiskutieren!

Alle eigenen Inhalte des Schockwellenreiters stehen unter einer Creative-Commons-Lizenz, jedoch können fremde Inhalte (speziell Videos, Photos und sonstige Bilder) unter einer anderen Lizenz stehen.


Werbung


Werbung


image  image  image
image  image  image