Quarto mit R — Kurzanleitung

Reproduzierbare Berichte, Analysen und Präsentationen mit Quarto (.qmd)

Ohne Installation loslegen: Öffne posit.cloud — kostenloses RStudio im Browser mit Quarto, R und allen Paketen. Kein Download nötig.
Inhalt
  1. Was ist Quarto?
  2. Aufbau einer .qmd-Datei
  3. YAML-Header
  4. Code Chunks
  5. Chunk-Optionen
  6. Inline-Code
  7. Figures & Plots
  8. Tabellen
  9. Cross-References
  10. Rendern
  11. Tipps für Abgaben

1. Was ist Quarto?

Quarto ist der Nachfolger von R Markdown. Eine .qmd-Datei kombiniert Text (Markdown), Code (R, Python, etc.) und Ergebnisse (Plots, Tabellen) in einem Dokument. Beim Rendern wird daraus HTML, PDF oder Word.

Vorteile

• Reproduzierbar: Code + Text in einer Datei
• Mehrere Ausgabeformate (HTML, PDF, Word)
• Automatische Nummerierung (Figures, Tables)
• Einfache Zusammenarbeit via Git

Workflow

# Typischer Ablauf:
1. Datei erstellen: analyse.qmd
2. Text + Code schreiben
3. Rendern  HTML/PDF/Word
4. Abgeben oder teilen

2. Aufbau einer .qmd-Datei

Jede Quarto-Datei hat drei Bestandteile:

---
title: "Meine Analyse"          # YAML-Header
format: html
---

## Einleitung                       <-- Markdown-Text

Hier steht normaler Text mit **fett** und *kursiv*.

```{r}                              <-- Code Chunk
#| label: fig-scatter
library(tidyverse)
ggplot(mtcars, aes(wt, mpg)) + geom_point()
```
Tipp: In RStudio: Ctrl+Alt+I fügt einen neuen Code Chunk ein.

3. YAML-Header

Der YAML-Block steht zwischen --- Zeichen und steuert Titel, Format und globale Optionen.

Minimal-Beispiel

---
title: "Hausarbeit Block 2"
author: "Max Muster"
date: today
format: html
---

Erweitert: HTML mit Inhaltsverzeichnis

---
title: "Regression Analysis"
author: "Anna Beispiel"
date: today
format:
  html:
    toc: true                  # Inhaltsverzeichnis
    code-fold: true            # Code einklappbar
    code-tools: true           # Code-Toolbar
    theme: cosmo               # Bootstrap-Theme
execute:
  warning: false              # Warnungen ausblenden
  message: false              # Meldungen ausblenden
---

PDF-Ausgabe

---
format:
  pdf:
    documentclass: article
    geometry: "margin=2.5cm"
---

4. Code Chunks

R-Code steht in Chunks, die mit ```{r} beginnen und mit ``` enden.

Einfacher Chunk

```{r}
mean(c(3, 7, 5, 9))   # Ergebnis: 6
```

Chunk mit Optionen (Hash-Pipe #|)

```{r}
#| label: daten-laden
#| echo: true
#| warning: false

library(tidyverse)
df <- read_csv("daten.csv")
glimpse(df)
```
Wichtig: Quarto benutzt #| (Hash-Pipe) für Chunk-Optionen, nicht die alte R-Markdown-Syntax {r echo=FALSE}.

5. Chunk-Optionen

OptionWertBeschreibung
#| echo: falsetrue/falseCode anzeigen?
#| eval: falsetrue/falseCode ausführen?
#| output: falsetrue/false/asisErgebnis anzeigen?
#| warning: falsetrue/falseWarnungen anzeigen?
#| message: falsetrue/falseMeldungen anzeigen?
#| error: truetrue/falseFehler trotzdem zeigen?
#| include: falsetrue/falseCode + Ergebnis komplett ausblenden
#| cache: truetrue/falseErgebnis cachen (schneller)

Typische Kombinationen

Nur Ergebnis zeigen (kein Code)

```{r}
#| echo: false
summary(df)
```

Code zeigen, nicht ausführen

```{r}
#| eval: false
install.packages("tidyverse")
```

Globale Optionen (im YAML-Header)

---
execute:
  echo: false      # Gilt für ALLE Chunks
  warning: false
---

Einzelne Chunks können globale Optionen überschreiben:

```{r}
#| echo: true        # Nur dieser Chunk zeigt Code
head(df)
```

6. Inline-Code

Ergebnisse direkt im Text einbetten mit `r ausdruck`:

Der Datensatz hat `r nrow(df)` Zeilen und
`r ncol(df)` Spalten.

Der Mittelwert ist `r round(mean(df$umsatz), 2)` CHF.

Ergebnis: «Der Datensatz hat 100 Zeilen und 5 Spalten. Der Mittelwert ist 4523.17 CHF.»

Tipp: Inline-Code ist perfekt für Berichte — Zahlen aktualisieren sich automatisch, wenn sich die Daten ändern.

7. Figures & Plots

Einfacher Plot

```{r}
#| label: fig-scatter
#| fig-cap: "Zusammenhang zwischen Gewicht und Verbrauch"
#| fig-width: 6
#| fig-height: 4

ggplot(mtcars, aes(wt, mpg)) +
  geom_point(color = "#3333B2") +
  geom_smooth(method = "lm") +
  labs(x = "Gewicht (1000 lbs)", y = "Meilen/Gallone")
```

Wichtige Figure-Optionen

OptionBeschreibungBeispiel
#| label: fig-xxxLabel für Cross-Referencefig-scatter
#| fig-cap:Bildunterschrift"Scatter Plot"
#| fig-width:Breite in Zoll6
#| fig-height:Höhe in Zoll4
#| fig-align:Ausrichtungcenter
#| layout-ncol:Plots nebeneinander2

Zwei Plots nebeneinander

```{r}
#| label: fig-vergleich
#| fig-cap: "Vergleich: Histogram vs. Boxplot"
#| layout-ncol: 2

ggplot(df, aes(umsatz)) + geom_histogram(bins = 20)
ggplot(df, aes(gruppe, umsatz)) + geom_boxplot()
```

8. Tabellen

Markdown-Tabelle (manuell)

| Variable   | Mittelwert | SD    |
|------------|-----------|-------|
| Umsatz     | 4523      | 1205  |
| Werbung    | 2800      | 890   |

R-generierte Tabelle mit knitr::kable

```{r}
#| label: tbl-summary
#| tbl-cap: "Deskriptive Statistik"

df %>%
  summarize(
    M = mean(umsatz),
    SD = sd(umsatz),
    N = n()
  ) %>%
  knitr::kable(digits = 2)
```
Tipp: Tabellen-Labels müssen mit tbl- beginnen (z.B. tbl-summary), damit Quarto sie nummeriert.

9. Cross-References

Verweise auf Figures und Tables im Text:

Wie in @fig-scatter zu sehen, sinkt der Verbrauch
mit steigendem Gewicht. Die Ergebnisse fasst
@tbl-summary zusammen.

Ergebnis: «Wie in Figure 1 zu sehen, sinkt der Verbrauch mit steigendem Gewicht. Die Ergebnisse fasst Table 1 zusammen.»

Regeln

TypLabel-PrefixVerweis
Figurefig-@fig-scatter
Tabletbl-@tbl-summary
Equationeq-@eq-regression
Sectionsec-@sec-methoden

10. Rendern

In RStudio

# Klick auf "Render" Button
# oder Shortcut:
Ctrl + Shift + K

Im Terminal

# HTML erzeugen
quarto render analyse.qmd

# PDF erzeugen
quarto render analyse.qmd --to pdf

# Word erzeugen
quarto render analyse.qmd --to docx

11. Tipps für Abgaben

Template für eine typische Analyse

---
title: "Block 2: Inferenz-Analyse"
author: "Vorname Nachname"
date: today
format:
  html:
    toc: true
    code-fold: true
    self-contained: true       # Eine einzige HTML-Datei
execute:
  warning: false
  message: false
---

## Setup

```{r}
library(tidyverse)
library(infer)
df <- read_csv("daten.csv")
```

## Explorative Analyse

Der Datensatz hat `r nrow(df)` Beobachtungen.

```{r}
#| label: fig-verteilung
#| fig-cap: "Verteilung der Zielvariable"

ggplot(df, aes(y)) + geom_histogram(bins = 20)
```

## Ergebnisse

Wie @fig-verteilung zeigt, ist die Variable
annähernd normalverteilt.
Checkliste vor Abgabe:
self-contained: true im YAML (alles in einer Datei)
warning: false und message: false global gesetzt
• Alle Plots haben fig-cap und label
• Alle Tabellen haben tbl-cap und label
• Pfade relativ (nicht C:/Users/...)
• Einmal frisch rendern (Session → Restart R, dann Render)

Weiterführende Links

Quarto: Using R — Offizielle Dokumentation
R for Data Science: Quarto — Hadley Wickham
Quarto Cheat Sheet — Posit/RStudio
Cross References — Quarto Docs
Execution Options — Chunk-Optionen Referenz