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.3 Kable
Im knitr
-Paket sorgt der Befehl kable()
für eine schöne Darstellung von Tabellen:
::diamonds %>%
ggplot2head() %>%
::kable() knitr
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.