── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.3 ✔ readr 2.1.4
✔ forcats 1.0.0 ✔ stringr 1.5.0
✔ ggplot2 3.4.4 ✔ tibble 3.2.1
✔ lubridate 1.9.3 ✔ tidyr 1.3.0
✔ purrr 1.0.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
Exercise
Erstellen Sie eine Tabelle mit mit folgenden Spalten:
ID-Spalte: \(1,2,..., 10\)
Eine Spalte mit Namem ds (ds wie Plural von Datensatz), die als geschachtelt (nested) pro Element jeweils einen der folgenden Datensätze enthält: mtcars, iris, chickweight, ToothGrowth (alle in R enthalten)
Berechnen Sie eine Spalte, die die Anzahl der Spalten von ds zählt!
Solution
Hier sind einige Datensätze, in einer Liste zusammengefasst:
Daraus erstellen wir eine Tabelle mit Listenspalte für die Daten:
d <-tibble(id =1:length(ds),ds = ds)
Jetzt führen wir die Funktion ncol aus, und zwar für jedes Element von ds. Wir brauchen also eine Art Schleife, das besorgt map für uns. Viele Funktionen in R sind “auomatisch verschleift” - das nennt man vektorisiert. Vektorisierte Funktionen werden für jedes Element eines Vektors ausgeführt.
Ein Beispiel für eine vektorisierte Funktion ist die Funktion +:
x <-c(1,2,3)y <-c(10, 20, 30)x + y
[1] 11 22 33
Man könnte übrigens auch schreiben:
`+`(x, y)
[1] 11 22 33
Was zeigt, dass + eine normale Funktion ist.
Zurück zur eigentlichen Aufgabe. Aber ncol ist eben nicht vektorisiert, darum müssen wir da noch eine Schleife dazu bauen, das macht map.
---extype: stringexsolution: NAexname: purrr-map06expoints: 1categories:- programming- loopdate: '2022-10-24'slug: purrr-map06title: purrr-map06---```{r}library(tidyverse)```# ExerciseErstellen Sie eine Tabelle mit mit folgenden Spalten:- ID-Spalte: $1,2,..., 10$- Eine Spalte mit Namem `ds` (`ds` wie Plural von Datensatz), die als *geschachtelt* (nested) pro Element jeweils einen der folgenden Datensätze enthält: `mtcars`, `iris`, `chickweight`, `ToothGrowth` (alle in R enthalten)Berechnen Sie eine Spalte, die die Anzahl der Spalten von `ds` zählt!</br></br></br></br></br></br></br></br></br></br># SolutionHier sind einige Datensätze, in einer Liste zusammengefasst:```{r}ds <-list(mtcars = mtcars, iris = iris, chickweight = ChickWeight, toothgrowth = ToothGrowth)```Daraus erstellen wir eine Tabelle mit Listenspalte für die Daten:```{r}d <-tibble(id =1:length(ds),ds = ds)```Jetzt führen wir die Funktion `ncol` aus, und zwar für jedes Element von `ds`.Wir brauchen also eine Art Schleife, das besorgt `map` für uns.Viele Funktionen in R sind "auomatisch verschleift" - das nennt man vektorisiert.Vektorisierte Funktionen werden für jedes Element eines Vektors ausgeführt.Ein Beispiel für eine vektorisierte Funktion ist die Funktion `+`:```{r}x <-c(1,2,3)y <-c(10, 20, 30)x + y```Man könnte übrigens auch schreiben:```{r}`+`(x, y)```Was zeigt, dass `+` eine normale Funktion ist.Zurück zur eigentlichen Aufgabe. Aber `ncol` ist eben nicht vektorisiert, darum müssen wir da noch eine Schleife dazu bauen, das macht `map`.```{r}d2 <- d %>%mutate(n_col =map(ds, ncol)) head(d2)```Entnesten wir noch `n_col`:```{r}d2 %>%unnest(n_col)```Wir können auch gleich `map` anweisen, keine Liste, sondern eine Zahl (`double`, reelle )Zahl zurückzuliefern, dann sparen wir uns das entschachteln:```{r}d %>%mutate(n_col =map_dbl(ds, ncol)) ```---Categories: - programming- loop