Listen in der R-Programmierung: Wie man Elemente erstellt und auswählt
⚡ Intelligente Zusammenfassung
Eine R-Liste ist ein Objekt, das Vektoren, Matrizen, Dataframes und sogar andere Listen in einem einzigen Container speichert. Die Funktion `list()` erstellt sie, und doppelte eckige Klammern rufen jedes Element wieder ab.

Was ist R-Liste?
R-Liste ist ein Objekt in der R-Programmierung, das Matrizen, Vektoren, Datenrahmen oder Listen enthält. R List wird auch verwendet, um eine Sammlung von Objekten zu speichern und sie bei Bedarf zu verwenden. Wir können uns die R-Liste als eine Tasche vorstellen, in die viele verschiedene Gegenstände passen. Wenn wir einen Gegenstand benötigen, können wir die Tasche öffnen und ihn verwenden.
Der Unterschied zu einem Vektor macht die Tasche so nützlich. Ein Vektor zwingt jedes Element in einen bestimmten Datentyp; so wird beispielsweise eine Zahl durch ein Wort zu Text. Eine Liste kennt diese Regel nicht, weshalb sie einen fünfelementigen Vektor oder eine zweizeilige Liste enthalten kann. Matrix und ein 714-zeiliger Datenrahmen daneben, ohne dass einer der Datensätze verändert wird.
Syntax der Liste in R
In der Programmiersprache R können wir die Funktion list() verwenden, um Listen zu erstellen:
list(element_1, ...) arguments: -element_1: store any type of R object -...: pass as many objects as specifying. each object needs to be separated by a comma
Jedes Argument kann entweder ohne Argument oder in der Form übergeben werden Tag = WertEin einfaches Argument wird zu einem Positionselement, das nur über seine Nummer erreichbar ist, während ein getaggtes Argument zusätzlich einen Namen erhält. Die Basis-R-Referenz für Liste() dokumentiert beide Formen und merkt an, dass unlist() als ungefähre Umkehrung von as.list() fungiert.
So erstellen Sie eine Liste in R
Nachfolgend finden Sie eine Schritt-für-Schritt-Anleitung zum Erstellen einer Liste in R:
Im folgenden Beispiel erstellen wir drei verschiedene Objekte, einen Vektor, eine Matrix und ein Datenrahmen Verwenden der Listenfunktion in R.
Schritt 1) Erstellen Sie einen Vektor
Verwenden Sie den folgenden Code, um einen Vektor in R zu erstellen
# Vector with numeric from 1 up to 5
vect <- 1:5
Der Doppelpunktoperator erstellt die Sequenz 1, 2, 3, 4, 5 als Integer-Vektor, und der Zuweisungspfeil speichert sie unter dem Namen vect.
Schritt 2) Erstellen Sie eine Matrix
Erstellen Sie nun eine Matrix mithilfe des folgenden Codes.
# A 2x 5 matrix
mat <- matrix(1:9, ncol = 5)
dim(mat)
Zwei Details verdienen hier Beachtung. Ein Raster mit zwei Zeilen und fünf Spalten benötigt zehn Werte, es werden jedoch nur neun angegeben. Daher verwendet R die Sequenz erneut und gibt eine Warnung aus, dass die Datenlänge kein Vielfaches der Zeilenanzahl ist. Dieser erneut verwendete Wert ist der Grund dafür, dass die zweite Zeile der ausgegebenen Matrix mit 1 statt mit 10 endet. Der Aufruf von `dim()` gibt anschließend die Form aus.
Ausgang:
## [1] 2 5
Schritt 3) Datenrahmen erstellen
Erstellen Sie mit dem folgenden Code einen Datenrahmen in R
# select the 10th row of the built-in R data set EuStockMarkets
df <- EuStockMarkets[1:10,]
Der Kommentar erwähnt die zehnte Zeile, der Ausdruck behält jedoch die Zeilen 1 bis 10 der integrierten EuStockMarkets-Serie bei. Durch die Teilmengenbildung wird außerdem die Zeitreihenklasse entfernt, sodass eine numerische Matrix anstelle eines echten Datenrahmens zurückgegeben wird. Genau deshalb enthält das unten ausgegebene Ergebnis Zeilenbeschriftungen im Format [1,] anstelle von Zeilennamen. Verwenden Sie `as.data.frame()`, wenn Sie einen echten Datenrahmen benötigen.
Schritt 4) Erstellen Sie eine Liste in R
Jetzt können wir die drei Objekte mit dem folgenden Code in die R-Liste einfügen
# Construct list with these vec, mat, and df:
my_list <- list(vect, mat, df)
my_list
Ausgang:
## [[1]] ## [1] 1 2 3 4 5 ## [[2]] ## [,1] [,2] [,3] [,4] [,5] ## [1,] 1 3 5 7 9 ## [2,] 2 4 6 8 1 ## [[3]] ## DAX SMI CAC FTSE ## [1,] 1628.75 1678.1 1772.8 2443.6 ## [2,] 1613.63 1688.5 1750.5 2460.2 ## [3,] 1606.51 1678.6 1718.0 2448.2 ## [4,] 1621.04 1684.1 1708.1 2470.4 ## [5,] 1618.16 1686.6 1723.1 2484.7 ## [6,] 1610.61 1671.6 1714.3 2466.8 ## [7,] 1630.75 1682.9 1734.5 2487.9 ## [8,] 1640.17 1703.6 1757.4 2508.4 ## [9,] 1635.47 1697.5 1754.0 2510.5 ## [10,] 1645.89 1716.3 1754.3 2497.4
Die drei Überschriften in doppelten eckigen Klammern in dieser Ausgabe geben die Listenpositionen an. Es wurden keine Datenstrukturen umgewandelt oder vereinfacht: Element eins ist weiterhin ein Integer-Vektor, Element zwei ist weiterhin eine Matrix und Element drei enthält weiterhin alle zehn Zeilen mit Aktienkursen.
Wählen Sie Elemente aus der R-Liste aus
Nachdem wir unsere Liste erstellt haben, können wir ganz einfach darauf zugreifen. Wir verwenden den Index [[index]], um ein Element in der Liste auszuwählen. Der Wert in den doppelten eckigen Klammern gibt die Position des gewünschten Elements in der Liste an.tract. Wenn wir beispielsweise 2 in die Klammern einfügen, gibt R das zweite aufgelistete Element zurück.
Jetzt hier R-TutorialVersuchen wir, die zweiten Listenelemente in R mit dem Namen my_list auszuwählen. Wir verwenden my_list[[2]]
# Print second element of the list
my_list[[2]]
Ausgang:
## [,1] [,2] [,3] [,4] [,5] ## [1,] 1 3 5 7 9 ## [2,] 2 4 6 8 1
Einfache und doppelte Klammern sind nicht austauschbar, und ihre Verwechslung ist die häufigste Fehlerquelle in Listen. Eine Klammer behält den umschließenden Text bei, zwei Klammern entfernen ihn.
| Ausdruck | Was kommt zurück | Klasse des Ergebnisses | Verwenden Sie es, wenn |
|---|---|---|---|
| meine_liste[[2]] | Das gespeicherte Element selbst | Was auch immer gespeichert war, hier eine Matrix | Sie müssen eine Berechnung mit einem Element durchführen. |
| meine_liste[2] | Eine Unterliste, die dieses eine Element enthält | Liste | Sie müssen den Listenwrapper beibehalten. |
| my_list[c(1, 3)] | Eine Teilliste der ausgewählten Elemente | Liste | Sie benötigen mehrere Elemente gleichzeitig |
| meine_liste[-2] | Alle Elemente außer dem zweiten | Liste | Sie müssen ein Element entfernen. |
# Compare the two bracket styles class(my_list[[2]]) # the matrix itself class(my_list[2]) # a list of length one # Several elements, and everything but one element my_list[c(1, 3)] my_list[-2]
Benannte Listen in R
Positionsindizes sind fehleranfällig: Beim Einfügen eines Elements verschiebt sich die Zahl nach dem Einfügen. Durch die Benennung der Elemente wird dieses Risiko beseitigt und der Code so lesbar, dass er die beschriebenen Daten widerspiegelt. Namen können beim Erstellen der Liste vergeben oder nachträglich mit `names()` hinzugefügt werden.
# Tag each element at creation time named_list <- list(numbers = vect, grid = mat, prices = df) # Three ways to reach the same element named_list$grid named_list[["grid"]] named_list["grid"] # returns a one-element list # Read or replace the names later names(named_list) names(named_list)[2] <- "grid_2x5"
Der $-Operator und die doppelten eckigen Klammern unterscheiden sich in einem Punkt, der Anfänger oft verwirrt. Der $-Operator führt eine Teilübereinstimmung durch, sodass `named_list$pri` weiterhin Preise findet, während `named_list[["pri"]]` NULL zurückgibt, da doppelte eckige Klammern exakt übereinstimmen, es sei denn, `exact = FALSE` wird übergeben. Die Teilübereinstimmung ist in der Konsole praktisch, in einem Skript jedoch unsicher. Daher sollte in gespeichertem Code die exakte Form bevorzugt werden.
# A compact map of the whole structure
str(named_list)
Die Funktion str() gibt für jedes Element eine Zeile mit dessen Typ und Größe aus. Dies ist die schnellste Möglichkeit, um zu überprüfen, ob eine Liste das enthält, was man erwartet, bevor man auf sie zugreift.
Elemente in einer R-Liste ändern, hinzufügen und löschen
Eine Liste ist nach ihrer Erstellung nicht unveränderlich. Dieselben Methoden, die ein Element lesen, schreiben auch darauf, daher werden zum Aktualisieren, Erweitern und Verkleinern einer Liste stets normale Zuweisungen verwendet.
# Replace an element in place named_list[["numbers"]] <- 1:10 # Add a new element simply by naming it named_list[["created"]] <- Sys.Date() # Append without a name: the element lands at the end named_list <- append(named_list, list(TRUE)) # Delete an element by assigning NULL to it named_list[["created"]] <- NULL
- Ersetzen: Die Zuweisung eines bereits vorhandenen Namens überschreibt dieses Element, seine Position bleibt jedoch unverändert.
- Hinzufügen: Die Zuweisung zu einem nicht existierenden Namen fügt ein neues Element am Ende der Liste an.
- Anhängen: Die Funktion append() erwartet als zweites Argument eine Liste. Daher muss ein einfacher Wert vor der Übergabe in list() eingeschlossen werden.
- Löschen: Die Zuweisung von NULL mit doppelten eckigen Klammern entfernt das Element und verkürzt die Liste.
Eine häufige Folge davon ist, dass NULL das Löschen bedeutet. Daher kann man mit doppelten Klammern kein tatsächliches NULL speichern. Verwenden Sie stattdessen eine Zuweisung mit einfachen Klammern, wie in `named_list["empty"] <- list(NULL)`. Dadurch bleibt der Platzhalter erhalten und NULL wird darin gespeichert.
Verschachtelte Listen und unlist() in R
Da eine Liste beliebige R-Objekte enthalten kann, kann sie auch andere Listen enthalten. Verschachtelung ist die übliche Darstellungsweise von Konfigurationsobjekten, JSON-Antworten und Modellergebnissen in R; daher gehören das Aufgreifen auf verschachtelte Listen und das Vereinfachen von Listen zu den alltäglichen Aufgaben.
# A list whose elements are themselves lists project <- list( meta = list(owner = "analyst", year = 2026), data = list(vect, mat) ) # Chain the accessors to reach an inner value project$meta$year project[["data"]][[2]] # Flatten every level into one atomic vector flat <- unlist(project) # Strip a single level and keep the rest as a list half <- unlist(project, recursive = FALSE)
Das Glätten von Listen hat einen gewissen Aufwand, den es zu verstehen gilt. `unlist()` muss einen atomaren Vektor zurückgeben und wandelt daher jeden Wert in den allgemeinsten vorhandenen Datentyp um, und zwar in der Reihenfolge logisch, Integer, Double, Zeichen. Eine verschachtelte Liste, die Zahlen und Text enthält, wird daher vollständig als Text zurückgegeben. Die Namen des Ergebnisses werden durch die Verknüpfung der äußeren und inneren Tags gebildet, weshalb ein Element als `meta.owner` und nicht als `owner` zurückgegeben wird.
Setzen Sie `use.names = FALSE`, wenn zusammengesetzte Namen unerwünscht sind, und `recursive = FALSE`, wenn nur die äußerste Ebene entfernt werden soll. Falls die Werte ihre Datentypen behalten müssen, lassen Sie die Struktur intakt und arbeiten Sie die Liste durch, anstatt sie zu vereinfachen.
Integrierter Datenrahmen in R
Listen werden oft mit Daten gefüllt, die von der Festplatte oder aus dem Internet gelesen werden. Daher ist es hilfreich zu verstehen, wie ein Dataframe entsteht, bevor die Daten darin gespeichert werden. Bevor wir unseren eigenen Dataframe erstellen, können wir uns den online verfügbaren R-Datensatz ansehen. Der Gefängnisdatensatz hat die Dimension 714×5. Mit der Funktion `tail()` können wir uns einen schnellen Überblick über das Ende des Dataframes verschaffen. Analog dazu zeigt `head()` den Anfang des Dataframes an. Die Anzahl der angezeigten Zeilen kann mit `head(df, 5)` festgelegt werden. Wir werden später mehr über die Funktion `read.csv()` erfahren. Daten in R importieren Tutorial.
PATH <-'https://raw.githubusercontent.com/guru99-edu/R-Programming/master/prison.csv'
df <- read.csv(PATH)[1:5]
head(df, 5)
Ausgang:
## X state year govelec black ## 1 1 1 80 0 0.2560 ## 2 2 1 81 0 0.2557 ## 3 3 1 82 1 0.2554 ## 4 4 1 83 0 0.2551 ## 5 5 1 84 0 0.2548
Die Anweisung [1:5] nach read.csv() wählt die ersten fünf Spalten aus, nicht die ersten fünf Zeilen, da ein Dataframe selbst eine Liste von Spalten ist. Die Indizierung einer Liste mit einfachen eckigen Klammern liefert eine kleinere Liste, und diese kleinere Liste ist wiederum ein Dataframe.
Wir können die Struktur des Datenrahmens mit str überprüfen:
# Structure of the data
str(df)
Ausgang:
## 'data.frame': 714 obs. of 5 variables: ## $ X : int 1 2 3 4 5 6 7 8 9 10 ... ## $ state : int 1 1 1 1 1 1 1 1 1 1 ... ## $ year : int 80 81 82 83 84 85 86 87 88 89 ... ## $ govelec: int 0 0 1 0 0 0 1 0 0 0 ... ## $ black : num 0.256 0.256 0.255 0.255 0.255 ...
Alle Variablen werden im gespeichert numerisch Format. Das $-Präfix in jeder Zeile ist derselbe Operator, der zuvor bei benannten Listen verwendet wurde. Dies bestätigt, dass ein Dataframe eine Liste gleichlanger Spalten mit rechteckigen Beschriftungen ist. Alles, was über das Benennen, Auswählen und Löschen von Listenelementen gelernt wurde, lässt sich daher direkt auf das Format übertragen. R-Datentypen und in Datenrahmenspalten.
