4 R-Sprachelemente
Jede Programmiersprache besteht aus festgelegten Symbolen und Operatoren. Diese beiden Elemente bilden zusammen die Syntax einer Programmiersprache mit der Operationen erstellt werden können. Syntaktische Kern von R ist vergleichsweise kompakt und übersichtlich.
4.1 Syntaktische Symbole
Syntaktische Symbole sind alle Sprachelemente, die für sich allein stehen. Symbole können Werte, Schlüsselworte oder Bezeichner sein. Symbole werden durch Operatoren oder durch Leerzeichen voneinander getrennt.
4.1.1 Werte
Werte können direkt angegeben werden. Dabei legt der Datentyp eines Werts (Kapitel 6) fest, wie dieser eingegeben werden muss.
- Zahlen werden als Ziffernfolge direkt eingegeben (z.B.
123.45
). - Wahrheitswerte werden in Grossbuchstaben eingegeben (z.B.
WAHR
). - Zeichenketten werden in Anführungszeichen eingegeben (z.B.
"Daten und Information"
)
4.1.2 Schlüsselworte
R kennt verschiedene Schlüsselworte, die als eigene Symbole festgelegt sind und nicht verändert werden können. Jedes der folgenden Schlüsselworte hat eine Bedeutung für R und kann nur in dieser Bedeutung verwendet und nicht umdefiniert werden.
Funktionen (Kapitel 8)
function
Entscheidungen (Kapitel 11) zur bedingten Ausführung von Operationen.
if
else
Schleifen zur wiederholten Ausführung von Operationen.
repeat
while
for
next
break
R-Schleifen sind im Vergleich zu vergleichbaren Funktionen äusserst ineffizient. Deshalb haben Schleifen in der praktischen Anwendung von R keine Bedeutung mehr. Stattdessen werden ausschliesslich spezielle Funktionen über Datenstrukturen verwendet. Entsprechend finden sich diese Schlüsselworte sehr selten in R-Skripten.
4.1.3 Bezeichner
Ist ein Symbol kein Schlüsselwort und kein Wert, dann wird das Symbol als Bezeichner behandelt. Ein Bezeichner ist ein Platzhalter für einen Wert (Kapitel 6) und kann wie ein Wert in Operationen verwendet werden.
Grundsätzlich können Bezeichner beliebige Zeichen enthalten. R erkennt einfache Bezeichner mit zwei Regeln.
- Beginnt mit einem ASCII-Buchstaben (A-Z, a-z) oder einem Unterstrich.
- Enthält nur ASCII-Buchstaben (A-Z, a-z), arabische Ziffern (0-9) und Unterstriche.
Weicht ein Bezeichner von diesen Regeln ab, dann muss dieser als solcher durch Backticks (`
) gekennzeichnet werden. Beispiel 4.1 zeigt einen Bezeichner, der den deutschen Umlaut (ü
) und ein Leerzeichen enthält. Weil ü
kein ASCII-Buchstabe ist und das Leerzeichen normalerweise Symbole trennt, muss der ganze Bezeichner als Symbol markiert werden.
Beispiel 4.1 (markierter Bezeichner)
`merkwürdiger Bezeichner`
Wird der Bezeichner aus Beispiel 4.1 nicht markiert, erzeugt R die Fehlermeldung Fehler: unerwartetes Symbol in "merkwürdiger Bezeichner"
.
4.2 Operationen
Definition 4.1 Eine Operation ist ein syntaktisches Konstrukt, das von einer Programmiersprache als ausführbar erkannt wird.
Eine Operation kann sich als ein Satz in einer Sprache vorgestellt werden, wobei für Programmiersprachen nur ganze (vollständige) Sätze gültig sind und ausgeführt werden.
R fügt Symbole und Operatoren solange zusammen, bis eine syntaktisch gültige Operation gefunden wird. Syntaktisch gültig heisst in diesem Zusammenhang, dass alle syntaktischen Elemente für eine Operation gefunden wurden. Erst dann versucht R diese Operation auszuführen. Bei der Ausführung kann festgestellt werden, dass eine Operation nicht ausführbar ist. In diesem Fall erzeugt R eine Fehlermeldung.
Die einfachste R-Operation ist die Angabe eines einzelnen Symbols. Wird nur ein Symbol als Operation eingegeben, dann bedeutet das für R, dass die zum Symbol gehörenden Daten serialisiert werden sollen. Das bedeutet, dass die Daten des Symbols angezeigt werden. Ist das Symbol ein Wert, dann wird der Wert wiederholt.
Beispiel 4.2 (Wert direkt serialisieren)
"Daten und Information"
Beispiel 4.2 zeigt die Operation, die die Zeichenkette Daten und Information als Ergebnis serialisiert.
4.2.1 Operatoren
Definition 4.2 Ein Operator ist ein syntaktisches Element, das Symbole zu einer Operation verknüpft.
Die bekanntesten Operatoren sind die arithmetischen Operatoren und die Vergleichsoperatoren.
In R sind vier spezielle Operatoren wichtig:
- Die drei Zuweisungsoperatoren (
<-
,=
und->
). - Der Funktionsaufrufoperator (
()
).
Mit den Zuweisungsoperatoren können Werte Namen zugewiesen werden. Bei den Pfeil-Operatoren wird der Wert in Richtung des Pfeils zugewiesen. Beim Gleich-Operator erfolgt die Zuweisung von rechts nach links. (s. Beispiel 4.3)
Definition 4.3 Eine Deklaration heisst die (erste) Zuweisung eines Werts an eine Variable.
Beispiel 4.3 (Zuweisung einer Zeichenkette)
= "Daten und Information 1"
buchtitel1 <- "Daten und Information 2"
buchtitel2 "Daten und Information 3" -> buchtitel3
Es können auch Namen anderen Namen zugewiesen werden. In diesem Fall wird der zugehörige Wert für einen Namen ermittelt und dem neuen Namen zugewiesen (Beispiel 4.4).
Beispiel 4.4 (Zuweisung von Namen an einen anderen Namen.)
= buchttitel1
buchtitel4 # buchtitel4 enthält "Daten und Information 1"
<- buchtitel2
buchtitel5 # buchtitel5 enthält "Daten und Information 2"
-> buchtitel6
buchtitel3 # buchtitel6 enthält "Daten und Information 3"
Der Funktionsaufrufoperator prüft ob der vorangehende Name eine Funktion ist und ruft diese auf. Zwischen den Klammern können Werte oder Namen als Parameter der Funktion übergeben werden. Die Parameter werden durch Kommas getrennt (Beispiel 4.5).
Beispiel 4.5 (Funktionsaufruf der Summefunktion mit Parametern)
sum(1,2,3) # 6
Der Funktionsaufrufoperator darf nicht mit den aus der Mathematik bekannten Klammern verwechselt werden. Klammern fassen auch in R Teiloperationen zusammen und reihen diese gegenüber einer anderen Teiloperation vor. Der Funktionsaufrufoperator kommt nur zur Anwendung, wenn ein Name auf eine Funktion verweist.
Wird der Funktionsaufrufoperator zusammen mit dem Schlüsselwort function
verwendet, dann wird eine Funktion mit den angegebenen Parametern erstellt (s. Beispiel 4.6). Diese Operation heisst Funktionsdeklaration. Eine deklarierte Funktion muss in R einem Namen zugewiesen werden.
Beispiel 4.6 (Funktionsdeklaration)
<- function (eins, zwei, drei)
add3 sum(eins, zwei, drei)
4.2.2 Blöcke
Mehrere Operationen lassen sich in R zu Blöcken zusammenfassen. Ein Block wird durch geschweifte Klammern ({
und }
) markiert. Geschweifte Klammern bilden also den Blockoperator.
Ein Block wird von R als eine Operation behandelt. Damit die Operationen in einem Block von R ausgeführt werden können, müssen alle übergeordneten Blöcke geschlossen werden.
Beispiel 4.7 zeigt die Deklaration einer Funktion, die aus zwei Operationen besteht. Damit beide Operationen zu einer Funktion zusammengefasst werden können, müssen diese in einen Block gefasst werden.
Beispiel 4.7 (Funktionsdeklaration mit Block)
<- function (eins, zwei, drei) {
add3mod6 sum(eins, zwei, drei) -> sechs
%% 6
sechs }