Sitzung 17 Rmarkdown und Kollaboration

17.1 Kollaboration

Im Folgenden sind einige Überlegungen und Tools aufgeführt, die bei der Kollaboration an einem Gruppenprojekt hilfreich sein könnten.

17.1.1 Find your workflow

Es gibt zwar effiziente und weniger effiziente Praktiken, sowie hilfreiche und weniger hilfreiche Tools – es gibt jedoch keinesfalls den einen perfekten Workflow. Letztendlich kommt es darauf an, sich gemeinsam für einen Workflow zu entscheiden und diesen klar festzulegen, oder sogar irgendwie festzuhalten.

Dazu gehört es z. B. auch, sich auf Formate von Dateinamen oder R-Objekten zu einigen, und einen ,offiziellen‘ Kanal für die Gruppenkommunikation festzulegen – sei es E-Mail, Slack oder WhatsApp.

17.1.2 Zwischenstände speichern

Wenn z. B. ein (längeres) Script einen (größeren) Datensatz generiert und ihn dem Objektnamen mein_datensatz zuweist, dann erscheint der Datensatz im lokalen Environment. Um den Datensatz mit anderen zu teilen, muss er irgendwie exportiert werden. Hierfür ist es ratsam, die save()-Funktion zu nutzen:

save(mein_datensatz, file = "zwischenstand_mein_datensatz.Rdata")

So wird eine Datei erstellt, die den Datensatz enthält und verschoben oder geteilt werden kann. Eine solche Datei kann auch andere Objekte (Funktionen, Listen, …) und mehrere Objekte auf einmal enthalten. Die Dateiendung ist dabei eigentlich egal, .Rdata scheint aber Usus zu sein.

Aus der Datei können Objekte dann jederzeit wieder ins Environment geladen werden mit dem Befehl:

load("zwischenstand_mein_datensatz.Rdata")

Auch wenn ein Skript auf einmal nicht mehr funktioniert (etwa weil die API sich ändert), ist es hilfreich, auf solche Zwischenstände zurückgreifen zu können.

17.1.3 RStudio Cloud

Im Seminar habe ich zuletzt RStudio Cloud über den Browser genutzt. Eine gute Möglichkeit der Kollaboration ist, ein Cloud-Projekt miteinander zu teilen. Aber Achtung: Dabei wird beim Teilen immer eine Kopie erstellt – daher kann es schwierig werden, gleichzeitig vorgenommene Änderungen wieder zusammenzuführen.

Wer die Cloud im Rahmen des Projektseminars nutzt, sollte keine vertraulichen Daten verarbeiten und sich sorgfältig absprechen, wer gerade an welcher Version des Projekts wie weiterarbeitet.

17.1.4 File sharing

Mit File-Sharing-Plattformen wie Dropbox (oder Google Drive, OneDrive, …) können ganze Ordner leicht zwischen verschiedenen Rechnern synchronisiert werden. Hierbei ist es jedoch keine gute Idee, den Projektordner (das working directory) selbst zu synchronisieren – dabei sind Probleme vorprogrammiert! Stattdessen ist es vielleicht eine Idee, einen Unterordner anzulegen, der dann mit diesen Diensten verknüpft werden kann.

Aber Vorsicht: Wenn mit vertraulichen Daten gearbeitet wird, ist der Austausch der Daten über diese Programme nicht zulässig!

17.1.5 E-Mail

Der Austausch von Scripts, Datensätzen, zip-Dateien etc. über E-Mail ist vielleicht umständlich, aber im Zweifel eine praktikable Lösung. Nur bei sehr großen Datensätzen ist man vielleicht irgendwann auf File-Sharing-Dienste wie WeTransfer angewiesen – aber auch hier mit den gleichen datenschutzrechtlichen Bedenken.

17.1.6 Git

Git ist ein mächtiges Tool für Version Control, und war lange aufgrund seiner etwas steilen Lernkurve berüchtigt. Mit dem richtigen Interface (RStudio bietet z. B. eine GUI an) ist das aber alles gar nicht so schwierig, und Portale wie Github oder Bitbucket erleichtern die zentrale Verwaltung von Repositories.

Git hat eine steile Lernkurve und erleichtert die Arbeit erst, wenn man damit sicher umgehen kann. Aber Git ist zurecht ein absolutes Standardwerkzeug für Entwickler*innen, und wer jemals ernsthaft in einer Gruppe (oder auch alleine!) an Code arbeiten will, sollte sich mit Git auseinandersetzen.

Eine ausführliche Anleitung für die Verknüpfung von RStudio und GitHub findet sich hier: https://happygitwithr.com/

17.1.7 Trello

Trello ist ein flexibles Projektmanagement-Tool, in dem man gemeinsame Listen anlegen kann.

Neben einer gemeinsamen To-do-Liste bietet es sich gerade bei größeren Teams an, wer gerade an was arbeitet (Liste: „Till arbeitet an…“).

Es ist erfahrungsgemäß ratsam, nicht nur kryptische Stichpunkte festzuhalten, sondern die gewünschten Resultate als „Stories“ zu beschreiben:

  • „Wir haben ein API-Passwort“
  • „Datensatz x ist mit Datensatz y verschnitten“
  • „Wir haben fünf Quellen für den Theorieteil“

17.2 Rmarkdown

17.2.1 Text formatieren

Wir arbeiten schon von Anfang an mit im Rmarkdown-Format. Wie Überschriften, Links, Bilder usw. in Rmarkdown genau funktionieren, ist in dieser Übersicht und auf diesem Cheat Sheet (Punkt: Pandoc’s Markdown) gut festgehalten.

17.2.2 Der Knit-Button

Wenn wir im YAML-Header die Zeile

output: html_document

setzen, erscheint (nach Abspeichern) ein „Knit“-Button in der GUI. Durch Drücken auf diesen Knopf passiert folgendes:

  • R erstellt („strickt“) ein HTML-Dokument aus dem vorliegenden Markdown und den Code Chunks
  • Dabei spielen „gespeicherte“ Objekte keine Rolle, die Chunks werden einfach der Reihe nach (in einem neuen Environment) ausgeführt
  • Externe Datensätze o. ä. müssen also am Anfang des Dokuments explizit geladen werden (etwa mit load()). Für den Abschlussbericht ist es ratsam, einen vorbereiteten Datensatz am Anfang des Rmarkdown-Dokuments so zu laden.

Im YAML-Header können noch viele weitere Angaben gemacht werden, die das Resultat verändern. Hier eine gute Dokumentation: https://bookdown.org/yihui/rmarkdown/html-document.html

17.2.3 Kable

Im knitr-Paket sorgt der Befehl kable() für eine schöne Darstellung von Tabellen:

ggplot2::diamonds %>%
  head() %>%
  knitr::kable()
carat cut color clarity depth table price x y z
0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
0.29 Premium I VS2 62.4 58 334 4.20 4.23 2.63
0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48

Auch hier gibt es wieder vielfältige Möglichkeiten zur visuellen Gestaltung. Diesen Post finde ich immer besonders hilfreich: https://haozhu233.github.io/kableExtra/awesome_table_in_html.html

17.2.4 Chunk Options

Am Anfang eines Code Chunks kann genau festgelegt werden, ob der Code ausgeführt werden soll, ob er im finalen Dokument erscheinen soll, ob Warnungen oder Fehler ausgegeben werden sollen, etc. Wenn zum Beispiel Libraries „versteckt“ geladen werden sollen, geht das mit diesem Code Chunk:

```{r, include = FALSE}
library(tidyverse)
library(rvest)
```

Ein überblick über die Chunk-Optionen findet sich hier: https://bookdown.org/yihui/rmarkdown/r-code.html

17.2.5 Wissenschaftliches Zitieren

Wer die Vorzüge von Literaturverwaltungssoftware (wie Citavi, Zotero, …) schon schätzen gelernt hat, kann in Rmarkdown folgendermaßen vorgehen:

17.2.5.1 Schritt 1: Exportieren

Die relevante Literatur in eine BibTex-Datei im R-Arbeitsverzeichnis exportieren, z.B. literatur.bib. BibTex (bzw. BibLatex) ist ein bewährtes und gut dokumentiertes Format. Ein Eintrag sieht dann z.B. so aus, wobei bortz der „Name“ des Eintrags ist, den wir frei wählen können:

@book{bortz,
  author = {Bortz, J{\"u}rgen and Schuster, Christof},
  title = {{Statistik f{\"u}r Human- und Sozialwissenschaftler}},
  publisher = {Springer},
  year = {2010},
  address = {Berlin},
  edition = {7},
}

17.2.5.2 Schritt 2: Verlinken

Im YAML-Header des Rmarkdown-dokuments die Angabe ergänzen:

bibliography: literatur.bib

Damit weiß der „Knit“-Befehl, wo er nach Literatur suchen soll.

17.2.5.3 Schritt 3: Zitieren

Im Text kann dann z. B. so zitiert werden:

Das zentrale Grenzwerttheorem besagt, dass die Stichprobenverteilung von
$\bar{x}$ mit steigender Stichprobengröße $n$ in eine Normalverteilung übergeht
[@bortz: 86].

17.2.5.4 Schritt 4: Stricken

Beim „Knit“-Befehl wird ein Literaturverzeichnis automatisch erstellt und ans Ende des Dokuments gehängt. Deshalb beendet man das Dokument am besten mit der Zeile:

## Literaturverzeichnis