<- list(NA, 0, NA, 1, 2) lst
Listenelemente nach Bedingung entfernen
Anwendungsfall:
Es sollen Elemente, die eine bestimmte Bedingung erfüllen, aus einer Liste entfernt werden.
Z. B. Werte, die undefiniert oder negativ sind oder unterhalb eines bestimmten Schwellenwertes liegen.
Lösung:
Anwenden der
discard()
Funktion aus dempurrr
Paket.Werte, die dem Kriterium entsprechen, werden entfernt.
library(purrr)
|>
lst discard(is.na)
[[1]]
[1] 0
[[2]]
[1] 1
[[3]]
[1] 2
Entfernen von character strings:
<- list(3, "dog", 2, "cat", 1)
lst |>
lst discard(is.character)
[[1]]
[1] 3
[[2]]
[1] 2
[[3]]
[1] 1
Eine eigene Bedingung definieren:
<- function(x) {
is_na_or_null is.na(x) || is.null(x)
}
<- list(1, NA, 2, NULL, 3)
lst |>
lst discard(is_na_or_null)
[[1]]
[1] 1
[[2]]
[1] 2
[[3]]
[1] 3
Komplexe Objekte
- Listen können komplexe Objekte enthalten, zum Beispiel lineare Modelle, die mit der
lm()
Funktion erstellt worden sind:
<- list(lm(x ~ y1),
mods lm(x ~ y2),
lm(x ~ y3))
- Mit einer Bedingung können Modelle identifiziert werden, deren \(R^2\) kleiner a.s 0.7 sind, danach können diese Modelle mit der
discard()
Funktion entfernt werden:
<- function(model) {
filter_r2 summary(model)$r.squared < 0.7
}
|>
mods discard(filter_r2)
💫 Die Gegenfunktion von discard()
ist keep()
.
💫 In keep()
werden Elemente angegeben, die in der Liste bleiben sollen.