Zusammengesetzte Datentypen in R
Inhalt und Lernziele des Kapitels Zusammengesetzte Datentypen in R.
Einordnung des Artikels
- Einführung in die Informatik
- Einführung in die Programmiersprache R
- Zusammengesetzte Datentypen in R
- Einführung in die Programmiersprache R
Einführung
Im letzten Kapitel wurden die elementaren Datentypen von R vorgestellt. Dort wurde ein etwas irreführender Eindruck über den Zusammenhang zwischen den elementaren und den zusammengesetzten Datentypen vermittelt. Nämlich dass - wie in fast allen Programmiersprachen - einige fundamentale Datentypen (wie logische Werte, ganze Zahlen, Gleitkommazahlen, Zeichen) existieren, die dann zu Vektoren oder Feldern zusammengesetzt werden können.
Richtig ist hingegen, dass es in R keine atomaren Datentypen gibt, sondern dass die bisher vorgestellten Datentypen (numeric mode, logical mode, character) intern immer als Vektoren behandelt werden. Und wenn dem Programmierer ein atomarer Datentyp suggeriert wird, handelt es sich um einen Vektor der Länge 1.
Erstes Ziel dieses Kapitels ist es daher die zusammengesetzten Datentypen von R vorzustellen und ihren Zusammenhang mit den scheinbar atomaren Datentypen zu erklären.
Das zweite Ziel ist es, den Umgang mit diesen zusammengesetzten Datentypen einzuüben. Dazu gehört:
- die Funktionen kennenzulernen, mit denen Variablen von zusammengesetztem Datentyp initialisiert werden,
- die Diagnose-Funktionen für die jeweiligen Datentypen kennenlernen,
- die vordefinierten Operatoren kennenzulernen, mit denen diese Variablen verknüpft werden können, sowie
- die vordefinierten Funktionen für zusammengesetzte Datentypen kennenzulernen.
Eine Schwierigkeit dabei kann dadurch entstehen, dass in R manche Begriffe (wie Vektor oder Liste) anders verwendet werden als in anderen Programmiersprachen – es wird also zu klären sein, wie die Bezeichnungen der zusammengesetzten Datentypen in R lauten.
Übersicht über zusammengesetzte Datentypen in R
Die folgende Tabelle zeigt nochmals die atomaren Datentypen, die bereits besprochen wurden. Angegeben wird jeweils der Speicher-Modus, der Modus und der Wertebereich.
Speicher-Modus | Modus | Wertebereich |
"logical"
| "logical"
| Wahrheitswert (TRUE, FALSE) |
"integer"
| "numeric"
| ganze Zahlen |
"double"
| "numeric"
| Gleitkommazahlen |
"character"
| "character"
| Zeichen |
In Abbildung 1, die bereits in Übersicht über Datentypen in R gezeigt und diskutiert wurde, ist zu sehen, dass jedes R-Objekt durch seine Struktur und Länge charakterisiert ist; zusätzlich können Attribute gesetzt sein.
Atomare Struktur bedeutet, dass ein Objekt aus Komponenten zusammengesetzt ist, die alle einen identischen Speicher-Modus besitzen (Paradebeispiel ist ein Vektor von Gleitkommazahlen).
Rekursive Struktur heißt, dass die Komponenten einen beliebigen Speicher-Modus besitzen können, insbesondere selber wieder von rekursiver Struktur sein können. Paradebeispiel ist hier eine Liste, die aus mehreren Vektoren besteht. Möglich ist aber auch eine Liste von Listen.
Die folgende Tabelle zeigt die atomaren Strukturen aus den Basis-Paketen:
Datentyp | Beschreibung |
vector
| Indizierte Komponenten von identischem Datentyp und gegebener Länge |
matrix
| Interpretation eines Vektors als zweidimensionale Matrix; die Länge des Vektors muss mit dem Produkt von Zeilen- und Spaltenanzahl übereinstimmen. Spezialfall von array. |
array
| Interpretation eines Vektors als mehrdimensionales Feld (Matrix im Fall von 2 Dimensionen) |
factor
| Einteilung von Daten (meist gegeben als Vektor) in Kategorien (levels) |
ordered
| Faktor für Kategorien, die angeordnet werden können |
table
| Zu einem oder mehreren Faktoren kann eine Kontingenztabelle erzeugt werden. Sie besteht aus einem integer-array. Damit das Feld leichter weiterverarbeitet werden kann (zum Beispiel indem es zu einem data frame verwandelt werden kann, aus dem leichter die Kategorien des Faktors abzulesen sind), gibt es den eigenen Datentyp table. |
Die folgende Tabelle zeigt die beiden wichtigsten rekursiven Strukturen aus den Basis-Paketen:
Datentyp | Beschreibung |
list
| Wie Vektoren mit dem Unterschied, dass jede Komponenten einen beliebigen Datentyp haben kann (insbesondere ist auch eine rekursive Struktur erlaubt - also zum Beispiel Listen von Listen). |
data frame
| Vereint die Eigenschaften von Liste und Matrix: Jede Komponente eines Data Frame ist ein Vektor, der einen beliebigen Modus haben kann, aber die Längen der Vektoren müssen übereinstimmen. |
Empfohlene Vorgehensweise
Die Beschreibung der einzelnen Datentypen in den folgende Kapiteln ist zu umfangreich, um sie beim ersten Durchgang vollständig durchzuarbeiten. Hier soll eine Vorgehensweise empfohlen werden, wie man mit dem gezeigten Material umgehen soll.
Der Aufbau der einzelnen Abschnitte ist immer ähnlich:
- Es werden diejenigen Funktionen gezeigt, mit denen eine Variable des entsprechenden Datentyps erzeugt werden kann.
- Es wird gezeigt, wie man auf die Komponenten eines zusammengesetzten Objektes zugreift.
- Die Diagnose-Funktionen für den Datentyp werden vorgestellt.
- Weitere Anwendungen des Datentyps werden gezeigt, die auf Funktionen aus den Basis-Paketen zurückgreifen.
- (Wer in der Dokumentation stöbert, wird schnell bemerken, dass es noch eine Vielzahl weiterer Funktionen gibt, die hier nicht besprochen werden.)
Da Vektor und Liste die grundlegenden Vertreter für atomare beziehungsweise rekursive Strukturen sind, müssen deren Eigenschaften unbedingt verstanden werden, um mit R arbeiten zu können. Das Erzeugen von Variablen, der Zugriff auf die Komponenten und die Diagnose-Funktionen sind dann für andere zusammengesetzte Datentypen ganz ähnlich realisiert.
Und insbesondere der recycling-Mechanismus, der bei der Verarbeitung von Vektoren angewendet wird, ist für Einsteiger sehr gewöhnungsbedürftig und kann zu zahlreichen Fehlern oder unerwünschten Ergebnissen führen. Die zunächst befremdlichen Eigenschaften des recycling-Mechanismus sollte man möglichst früh kennenlernen.
Dagegen können die Anwendungen in einem ersten Durchgang lediglich überflogen und zur Kenntnis genommen werden. Erst wenn man eigene Anwendungen schreibt, wird man darauf zurückkommen. Aber dann ist es wichtig, einen Eindruck davon zu besitzen, welche Funktionen in den R-Basis-Paketen vorbereitet sind und wie man sie einsetzt. Ohne diesen Überblick wird man viel unnötige Arbeit investieren, um derartige Funktionen selber zu implementieren.
Bei den weiteren Datentypen kann man sich ein wenig danach richten, mit welcher Absicht man R erlernen möchte; hier einige Anhaltspunkte:
- Wer höhere Mathematik betreiben möchte, wird Matrizen sorgfältig studieren müssen, da viele Berechnungen auf Operationen mit Matrizen heruntergebrochen werden können.
- Felder (array) sind dann lediglich die mehrdimensionale Verallgemeinerung von Matrizen.
- Wer mehr an Statistik interessiert ist, wird an den Datentypen Dataframe und Faktor nicht vorbeikommen, da sie zahlreiche Funktionen bereitstellen, wie man Daten speichert, verarbeitet und insbesondere klassifiziert.
- Speziell mit Tabellen lassen sich dann Kontingenztabellen erstellen.
- Soll dagegen R als erste Programmiersprache erlernt werden und weniger unter dem Aspekt mathematischer oder statistischer Anwendungen, sollte man von den zusammengesetzten Datentypen zunächst lediglich die wichtigsten Eigenschaften von Vektoren und Listen verstehen und möglichst schnell zu den Kontrollstrukturen und Funktionen übergehen. Andere zusammengesetzte Datentypen und spezielle Anwendungen können dann auch später durchgearbeitet werden.
Für Lehrende, die diesen Kurs als Begleitlektüre einsetzen, wird empfohlen, den Studenten einen Fahrplan durch die zusammengesetzten Datentypen zusammenzustellen; dieser sollte angeben, welche Abschnitte in welcher Reihenfolge und mit welcher Priorität durchzuarbeiten sind.
Da in R Attribute eingesetzt werden, um Datentypen mit weiteren Informationen auszustatten, wird man auch irgendwann verstehen müssen, wie Attribute gesetzt, verändert und abgefragt werden; einige Attribute werden sogar intern gesetzt. Im Kapitel über Vektoren und besonders ausführlich über Matrizen werden die Eigenschaften von Attributen erklärt.
Ausführliches Inhaltsverzeichnis
- Vektoren in R: der Datentyp vector
- Vektoren in R: Anwendungen
- Matrizen in R: der Datentyp matrix
- Matrizen in R: Anwendungen
- Felder in R: der Datentyp array
- Listen in R: der Datentyp list
- Listen in R: Anwendungen
- Dataframes in R: der Datentyp data frame
- Dataframes in R: Anwendungen
- Faktoren in R: der Datentyp factor
- Faktoren in R: Anwendungen
- Tabellen in R: der Datentyp table