Grundlagen in R

From DHVLab

Abbildung 1: Diagramm über die unterschiedlichen Ausprägungen eines Objekts in R.

R ist eine objektorientierte, funktionale Programmiersprache. Oder um es in den Worten von John Chambers, Entwickler der Software S und ihres Nachfolgers R, zu sagen: „Alles, was existiert, ist ein Objekt. Alles, was passiert, ist ein Funktionsaufruf.“ [1] Ob Sie also mit einer Zahl arbeiten oder mit einer Zeichenkette, ist im übergeordneten Sinne irrelevant – eine Zahl ist ebenso ein Objekt wie eine Zeichenkette. Darauf aufbauend ist eine Feinabstufung möglich: Bei einem Objekt kann es sich um eine Funktion handeln – oder um Daten. Daten wiederum erlauben eine Untergliederung in Datentypen und Datenstrukturen, die beide jeweils weitere Verästelungen nach sich ziehen (Abbildung 1).

Objekte und Zuweisungen

Ein Objekt auf Datenebene ist demzufolge nichts anderes als ein Auffangbehälter, der weitere Objekte unterschiedlichsten Typs und unterschiedlichster Struktur beinhalten kann. [A 1] Für den Anfang stellen Sie sich jedoch erst einmal ein Objekt vor, das aus einem einzigen Wert (beispielsweise der Zahl 5) besteht. Möchten Sie dieses Objekt später für weitere Berechnungen verwenden, ohne permanent 5 eingeben zu müssen, können Sie ihm einen Namen zuweisen:

x <- 5
x
## [1] 5

Umgangssprachlich ausgedrückt teilen Sie R mit: Nehme den Namen x und übergebe ihm (<-) die Zahl 5. Das Objekt namens x enthält nun den Wert 5. Wie Sie durch Eingabe des vorhergehenden Codes vielleicht schon bemerkt haben, gibt Ihnen R den Inhalt eines Objekts nicht automatisch zurück – Sie müssen den Namen des Objekts in die Konsole eingeben und ausführen (hier x in Zeile 2). Im Prinzip speichern Sie ein Objekt durch Zuweisung eines Namens also immer nach folgendem Schema ab: name <- objekt.

Namen müssen folgenden Vorschriften genügen:

  • Sie dürfen keine Leerzeichen enthalten.
  • Sie dürfen nicht mit einer Zahl beginnen (1x ist nicht erlaubt).
  • Auf Namen, die mit einem Punkt beginnen, darf keine Zahl folgen (.1x führt zu einer Fehlermeldung, .x1 verursacht jedoch keine Probleme).
  • Sie dürfen nicht von R vorbelegt sein. [A 2]

Bis auf diese Ausnahmen sind alle Buchstaben [A 3], alle Zahlen und die Zeichen _ (Unterstrich) und . (Punkt) erlaubt. Eine weitere Anmerkung: R unterscheidet grundsätzlich zwischen Groß- und Kleinschreibung. Ein Objekt namens A1 ist daher nicht identisch mit einem Objekt namens a1. In jedem Fall ist es jedoch empfehlenswert, sich für eine Konvention bei der Namenszuweisung zu entscheiden und diese im gesamten Skript einzuhalten. Sie können beispielsweise eine dieser Regeln verwenden:

  • Namen bestehen nur aus Kleinbuchstaben. Bei mehreren Wörtern wird kein Trennzeichen verwendet (digitalhumanities).
  • Namen bestehen nur aus Kleinbuchstaben. Als Trennzeichen wird ein Punkt (digital.humanities) oder Unterstrich (digital_humanities) verwendet.
  • Namen mit einem Wort bestehen aus Kleinbuchstaben. Bei Namen mit mehreren Wörtern wird das erste Wort klein geschrieben, die restlichen Wörter leiten mit einem Großbuchstaben ein (digitalHumanities).
  • Namen bestehen aus Klein- und Großbuchstaben. Ein Wort wird durch einen Großbuchstaben eingeleitet (DigitalHumanities).

Datentypen

Ein Objekt lässt sich auf elementarster Ebene näher spezifizieren – über seinen Datentyp. Die drei wichtigsten Datentypen in R lauten: numeric, character und logical. Handelt es sich bei Ihrem Objekt um eine Zahl, ordnen Sie den entsprechenden Datentyp also vermutlich bereits intuitiv richtig zu: numeric. Auch die weiteren zwei Typen sind annähernd selbsterklärend: character ist der Container für Zeichen (beispielsweise Buchstaben), logical der Container für Wahrheitswerte (TRUE, FALSE) [A 4].

Eine komprimierte Fassung finden Sie in nachfolgender Tabelle:

Beschreibung Beispiel Datentyp
Ganze und reelle Zahlen 3.17 numeric
Zeichen und Zeichenketten "Bild" character
Wahrheitswerte TRUE, FALSE logical

Zwei Beispiele dürften Sie zurecht irritieren: Zum einen wird ein Punkt als Dezimaltrennzeichen verwendet, zum anderen ist das Wort Bild von Anführungszeichen umschlossen ("..."). Diese Fälle betrachten wir nun genauer. Zunächst geben Sie die Zahl 3,17 in üblicher Notation mit Komma als Dezimaltrennzeichen in die Konsole ein und führen die Zeile aus:

3,17
## Error: unexpected ',' in "3,

Sie merken: RStudio gibt statt eines ordnungsgemäßen Outputs eine (durchaus kryptische) Fehlermeldung (Error) zurück. Um diese zu verstehen, müssen Sie sich bewusst machen, dass die Verwendung des Kommas in R vorbelegt ist: Das Zeichen kann Objekte eines Vektors ebenso abtrennen wie Argumente einer Funktion (mehr dazu in den Abschnitten Datenstrukturen und Funktionen). Reelle Zahlen (Zahlen mit Nachkommastellen) benötigen daher in R einen Punkt statt eines Kommas als Dezimaltrennzeichen.

Sehen Sie sich nun das zweite Beispiele an, indem Sie Bild in die Konsole eingeben und die Zeile ausführen:

Bild
## Error in eval(expr, envir, enclos): Objekt 'Bild' nicht gefunden

Auch hier zeigt uns RStudio einen Error an, dieses Mal jedoch mit einer konkreteren weiterführenden Information: Objekt 'Bild' nicht gefunden. Die Erklärung ist simpel: Ohne Anführungszeichen erwartet R beim Ausführen der Zeile ein Objekt namens Bild, das im Workspace bereits existiert – von Ihnen also, wie im Abschnitt Objekte und Zuweisungen beschrieben, erzeugt wurde. Achten Sie daher immer darauf, einen Wert mit Anführungszeichen ("Bild" oder 'Bild') zu umschließen, wenn es sich bei ihm um Buchstaben oder eine Zeichenkette handelt und R diese als solche erkennen soll.

Den Datentyp eines Objekts können Sie infolge über zwei Funktionen bestimmen: mode und is.datentyp (also is.numeric, is.character oder is.logical). Der Unterschied: mode gibt den genauen Datentyp zurück – is.datentyp prüft lediglich, ob es sich um den von Ihnen spezifizierten Datentyp handelt und spuckt einen Wahrheitswert aus. Sehen Sie sich dazu beispielhaft folgenden Code an:

x <- 5
mode(x)
## [1] "numeric"

is.character(x)
## [1] FALSE

Laut mode ist das Objekt x vom Typ numeric. Eine Prüfung, ob es sich bei x um ein Objekt des Typs character handelt, resultiert folgerichtig in der Rückgabe FALSE. Aber Achtung:

x <- "5"
mode(x)
## [1] "character"

is.character(x)
## [1] TRUE

Sie weisen x im vorhergehenden Code durch die umschließenden Anführungszeichen nicht mehr die Zahl sondern das Zeichen 5 zu – arithmetische Operationen wie im Abschnitt Operatoren können mit diesem Objekt nicht mehr durchgeführt werden. Eine nachträgliche Änderung des Datentyps ist über die Funktion as.datentyp möglich:

x <- "5"
mode(x)
## [1] "character"

x <- as.numeric(x)
mode(x)
## [1] "numeric"

Das Objekt x enthält zunächst wie bislang das Zeichen 5, dessen Datentyp Sie über mode testen. Im Anschluss entscheiden Sie sich mit dem Aufruf as.numeric(x), den Typ in numeric umzuwandeln und das Ergebnis wieder in einem Objekt namens x abzulegen. Die erneute Eingabe von mode sagt Ihnen daraufhin: Der Datentyp des Objekts x ist numeric.

Die Umwandlung einer Zahl oder eines Zeichens in einen Wahrheitswert funktioniert hingegen nicht ohne Weiteres:

x <- "5" 
x <- as.logical(x) 
x
## [1] NA

Das Objekt x enthält nach der Änderung des Datentyps die Angabe NA – dies kennzeichnet einen fehlenden Wert (not available).

Datenstrukturen

Coming Soon.

Funktionen

Coming Soon.

Operatoren

Coming Soon.

Anmerkungen

  1. Die Rolle der Funktionen sei vorerst außen vor gelassen, eine ausführliche Erklärung dieser finden Sie im Abschnitt Funktionen.
  2. Alle reservierten Namen finden Sie unter: https://stat.ethz.ch/R-manual/R-devel/library/base/html/Reserved.html.
  3. Sie könnten beispielsweise ein Objekt namens â anlegen. Es sei allerdings aus Gründen des guten Stils davon abgeraten, Sonderzeichen zu benutzen.
  4. Ein Wahrheitswert gibt an, ob eine Aussage wahr oder falsch ist. Die Aussage „Albrecht Dürer war ein Maler“ wäre demnach wahr (TRUE).

Einzelnachweise

  1. Chambers, John M. (2014): Object-Oriented Programming, Functional Programming and R. In: Statistical Science. 29.2, S. 167-180, URL: http://arxiv.org/pdf/1409.3531