Zusammengesetzte Datentypen in R

Inhalt und Lernziele des Kapitels Zusammengesetzte Datentypen in R.

Einordnung des Artikels

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:

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.

Abbildung 1: Ein Objekt in R wird charakterisiert durch seine Struktur, die Länge und eventuell durch weitere Attribute.Abbildung 1: Ein Objekt in R wird charakterisiert durch seine Struktur, die Länge und eventuell durch weitere Attribute.

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:

  1. Es werden diejenigen Funktionen gezeigt, mit denen eine Variable des entsprechenden Datentyps erzeugt werden kann.
  2. Es wird gezeigt, wie man auf die Komponenten eines zusammengesetzten Objektes zugreift.
  3. Die Diagnose-Funktionen für den Datentyp werden vorgestellt.
  4. Weitere Anwendungen des Datentyps werden gezeigt, die auf Funktionen aus den Basis-Paketen zurückgreifen.
  5. (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:

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

  1. Vektoren in R: der Datentyp vector
  2. Vektoren in R: Anwendungen
  3. Matrizen in R: der Datentyp matrix
  4. Matrizen in R: Anwendungen
  5. Felder in R: der Datentyp array
  6. Listen in R: der Datentyp list
  7. Listen in R: Anwendungen
  8. Dataframes in R: der Datentyp data frame
  9. Dataframes in R: Anwendungen
  10. Faktoren in R: der Datentyp factor
  11. Faktoren in R: Anwendungen
  12. Tabellen in R: der Datentyp table