map() und typisierte Varianten
Wenden Sie mit map(), map_dbl(), map_chr() und map_lgl() Funktionen auf Listen an.
map() und typisierte Varianten ist eine kostenlose R Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des R Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.
Funktionale Programmierung mit purrr
Das Paket purrr stellt konsistente, typsichere Werkzeuge für die funktionale Programmierung in R bereit. Statt for-Schleifen zu schreiben, wenden Sie eine Funktion per map auf eine Liste oder einen Vektor an. Das Ergebnis ist übersichtlicherer Code, der sich leichter nachvollziehen und kombinieren lässt.
library(purrr)
# A list of numbers
numbers <- list(1, 4, 9, 16, 25)
# Apply sqrt() to each element
result <- map(numbers, sqrt)
print(result)map() — Gibt immer eine Liste zurück
map(.x, .f) wendet die Funktion .f auf jedes Element von .x an und gibt eine Liste zurück. Die Eingabe kann eine Liste, ein Vektor oder ein Data Frame sein (dabei wird über die Spalten iteriert). Dies ist die allgemeinste map-Variante.
library(purrr)
# Map over a character vector
fruits <- c('apple', 'banana', 'cherry')
# nchar() counts characters in each string
result <- map(fruits, nchar)
print(result) # Returns a list
print(class(result))map_dbl() — Gibt einen numerischen Vektor zurück
map_dbl(.x, .f) wendet .f auf .x an und gibt einen numerischen (Double-)Vektor zurück. Wenn ein Ergebnis kein einzelner numerischer Wert ist, wird ein Fehler ausgelöst — diese Typsicherheit erkennt Fehler frühzeitig.
library(purrr)
groups <- list(
A = c(10, 20, 30),
B = c(5, 15, 25, 35),
C = c(100, 200)
)
# Compute mean for each group — returns a named numeric vector
means <- map_dbl(groups, mean)
print(means)
print(class(means))map_chr() — Gibt einen Zeichenkettenvektor zurück
map_chr(.x, .f) wendet die Funktion an und gibt einen Zeichenkettenvektor zurück. Das ist nützlich, um Zeichenkettenattribute zu extrahieren, Ergebnisse zu formatieren oder Dateipfade zu erstellen. Die Funktion muss für jedes Element eine einzelne Zeichenkette zurückgeben.
library(purrr)
models <- list(
m1 = lm(mpg ~ wt, data=mtcars),
m2 = lm(mpg ~ hp, data=mtcars),
m3 = lm(mpg ~ cyl, data=mtcars)
)
# Extract the formula from each model as a string
map_chr(models, function(m) deparse(formula(m)))map_lgl() — Gibt einen logischen Vektor zurück
map_lgl(.x, .f) gibt einen logischen Vektor mit Werten TRUE/FALSE zurück. Die Funktion eignet sich ideal, um Bedingungen für eine Liste zu prüfen — beispielsweise um festzustellen, welche Elemente ein Kriterium erfüllen.
library(purrr)
datasets <- list(
df1 = data.frame(x=1:3, y=c(NA,2,3)),
df2 = data.frame(x=1:3, y=4:6),
df3 = data.frame(x=c(NA,NA,3), y=1:3)
)
# Does each data frame contain any NA values?
map_lgl(datasets, function(df) anyNA(df))map_int() — Gibt einen Integer-Vektor zurück
map_int(.x, .f) gibt einen Integer-Vektor zurück. Verwenden Sie die Funktion, wenn Ihre Funktion Zählungen, Indizes oder andere Ganzzahlergebnisse liefert. Hinweis: In R geben length() und nrow() Integer zurück.
library(purrr)
my_lists <- list(
a = 1:10,
b = letters[1:5],
c = c(TRUE, FALSE, TRUE, TRUE)
)
# Count elements in each list item
map_int(my_lists, length)map_df() / map_dfr() — Gibt einen Data Frame zurück
map_df(.x, .f) (Alias: map_dfr()) wendet .f an und fügt die Ergebnisse zeilenweise zu einem einzelnen Data Frame zusammen. Die Funktion muss für jedes Element einen Data Frame oder ein Tibble zurückgeben. map_dfc() fügt die Ergebnisse stattdessen spaltenweise zusammen.
library(purrr)
files <- c('sales_q1', 'sales_q2', 'sales_q3')
# Simulate reading and labeling each file
map_df(files, function(f) {
data.frame(
file = f,
rows = sample(50:100, 1),
cols = 5
)
})Anonyme Funktionen mit ~
purrr unterstützt eine kompakte Formelschreibweise für anonyme Funktionen: ~expr, wobei .x auf das aktuelle Element verweist. Dadurch entfällt das Schreiben von function(x) expr und der Code bleibt übersichtlich. Beide Schreibweisen funktionieren identisch.
library(purrr)
numbers <- list(1, 4, 9, 16, 25)
# Three equivalent ways:
result1 <- map(numbers, function(x) x^2)
result2 <- map(numbers, ~.x^2)
result3 <- map_dbl(numbers, ~.x^2)
print(result2)
print(result3)Über eine benannte Liste iterieren
Wenn .x eine benannte Liste oder ein benannter Vektor ist, übernimmt die Ausgabe von map() diese Namen. Auch map_dbl() und andere typisierte Varianten führen die Namen weiter, sodass die Ergebnisse selbsterklärend bleiben.
library(purrr)
region_data <- list(
East = c(100, 120, 115, 130),
West = c(200, 195, 210, 205),
North = c(80, 85, 90, 88)
)
# Named results
map_dbl(region_data, mean)map() mit Data-Frame-Spalten verwenden
Ein Data Frame ist eine Liste von Spalten. map(df, fn) wendet fn auf jede Spalte an. In Kombination mit map_dbl() können Sie so kompakt für alle Spalten gleichzeitig eine Statistik berechnen.
library(purrr)
df <- data.frame(
score_a = c(85, 90, 78, 92),
score_b = c(88, 85, 80, 95),
score_c = c(92, 88, 84, 90)
)
# Mean of every column
map_dbl(df, mean)map()-Aufrufe verschachteln
Sie können map()-Aufrufe für eine Iteration über mehrere Ebenen verschachteln — ein äußerer Aufruf iteriert über Gruppen, ein innerer über Parameter. Dadurch werden verschachtelte for-Schleifen durch eine übersichtliche, kombinierbare Struktur ersetzt. Beschränken Sie die Verschachtelung aus Gründen der Lesbarkeit auf zwei Ebenen.
library(purrr)
groups <- list(A = 1:5, B = 6:10)
functions <- list(mean=mean, sd=sd, min=min)
# Apply each function to each group
map(groups, function(g) {
map_dbl(functions, function(f) f(g))
})Kurzer Test
Was ist der wesentliche Unterschied zwischen map() und map_dbl()?
Zusammenfassung: map() und typisierte Varianten
Die wichtigsten Punkte zu map() und typisierten Varianten:
map(.x, .f)— gibt immer eine Liste zurück; am flexibelstenmap_dbl()— gibt einen numerischen Vektor zurück; erzeugt bei einem falschen Typ einen Fehlermap_chr()— gibt einen Character-Vektor zurückmap_lgl()— gibt einen logischen Vektor zurückmap_int()— gibt einen Integer-Vektor zurückmap_df()/map_dfr()— fügt die Ergebnisse zeilenweise zu einem Data Frame zusammen~.x-Kurzschreibweise — kompakte Syntax für anonyme Funktionen- Benannte Eingaben erzeugen automatisch benannte Ausgaben
library(purrr)
# Typed map showcase
data_list <- list(
group_A = c(10, 20, 30),
group_B = c(5, 15),
group_C = c(100, 200, 300, 400)
)
cat('Counts:', map_int(data_list, length), '\n')
cat('Means: ', map_dbl(data_list, mean), '\n')
cat('Any>50:', map_lgl(data_list, ~any(.x > 50)), '\n')Lerne R mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 43
- Lektionen
- 159
Häufig gestellte Fragen
Ist die Lektion „map() und typisierte Varianten“ kostenlos?
Ja — der vollständige Text von „map() und typisierte Varianten“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des R Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „map() und typisierte Varianten“?
Wenden Sie mit map(), map_dbl(), map_chr() und map_lgl() Funktionen auf Listen an. Du übst R Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um R Academy zu starten?
Keine Vorkenntnisse erforderlich. R Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „map() und typisierte Varianten“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser R Academy-Lektion Code schreiben und ausführen?
Ja. Jede R Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- map() und typisierte Varianten
- map2() und pmap() für mehrere Eingaben
- reduce(), accumulate() und walk()
- keep(), discard() und Listenfilterung