Kurs
Relationale Operatoren
Relationale Operatoren, auch Vergleicher genannt, zeigen dir, wie ein R-Objekt zu einem anderen R-Objekt in Beziehung steht. Du kannst zum Beispiel prüfen, ob zwei Objekte gleich sind. Das geht mit dem Zeichen == (doppeltes Gleich). Ein logischer Ausdruck, der auf beiden Seiten TRUE ist, ergibt den logischen Wert TRUE, denn TRUE ist gleich TRUE, wie unten gezeigt.
TRUE == TRUE
TRUE
Hast du hingegen auf einer Seite TRUE und auf der anderen FALSE, erhältst du als Ergebnis den logischen Wert FALSE.
TRUE == FALSE
FALSE
Neben logischen Variablen kannst du auch die Gleichheit anderer Typen prüfen.
Vergleichen wir Zeichenketten und Zahlen.
100 == 100
TRUE
100 == 200
FALSE
'tutorial' == 'R'
FALSE
- Das Gegenstück zum Gleichheitsoperator ist der
Ungleichheits-Operator, geschrieben als!=(Ausrufezeichen gefolgt von Gleich).
Alle Bedingungen, die zuvor FALSE ergaben, werden damit TRUE. Probieren wir es aus!
100 != 200
TRUE
'tutorial' != 'R'
TRUE
TRUE != FALSE
TRUE
Den Ungleichheitsoperator kannst du ebenso für numerische Werte und andere R-Objekte wie Matrizen, Vektoren und Listen verwenden.
-
Was, wenn du prüfen willst, welches von zwei R-Objekten größer oder kleiner ist? Das geht mit den Zeichen
<und>(kleiner als bzw. größer als).Schauen wir uns zuerst ein numerisches Beispiel an.
2 > 10
FALSE
-200 < 0
TRUE
Warum 2 nicht größer als 10 ist oder -200 kleiner als 0, erklärt sich von selbst. Aber wie ist es bei Strings bzw. Zeichen? Schauen wir es uns an.
R orientiert sich bei Zeichenketten am alphabetischen Ordnungsschema.
Im folgenden Beispiel steht t im Alphabet nach R; daher ist t größer als R.
'tutorial' > 'RRRRRRRRR'
TRUE
Wichtig: In R und den meisten Programmiersprachen wird TRUE numerisch als 1 und FALSE als 0 interpretiert. Nach dieser Logik ist TRUE größer als FALSE.
TRUE > FALSE
TRUE
- Du kannst auch prüfen, ob ein R-Objekt größer-gleich
(>=)oder kleiner-gleich(<=)einem anderen ist. Dazu kombinierst du das Größer- bzw. Kleiner-als-Zeichen mit einem Gleichheitszeichen. Gilt eine der beiden Bedingungen (kleiner-gleich oder größer-gleich), ist die gesamte Bedingung TRUE.
5 >= 5 # 5 ist nicht größer als 5, aber gleich – ergibt also TRUE.
TRUE
5 >= 10
FALSE
Mehr über R-Datentypen erfährst du in diesem DataCamp-Tutorial. R kann sehr gut mit Listen, Matrizen und Vektoren umgehen.
Können die R-Vergleicher auch Vektoren verarbeiten? Finden wir es heraus.
Angenommen, du hast einen Zeilenvektor mit den Aufrufen deines letzten DataCamp-Tutorials in den vergangenen 10 Tagen. Du willst wissen, an welchen Tagen du mindestens 100 Views hattest. Verwende dazu einfach den Größer-gleich-Operator.
datacamp_views <- c(100,20,5,200,60,88,190,33,290,64)
length(datacamp_views)
10
datacamp_views >= 100
- TRUE
- FALSE
- FALSE
- TRUE
- FALSE
- FALSE
- TRUE
- FALSE
- TRUE
- FALSE
Wie du siehst, sind beim ersten, vierten, siebten und neunten Element die Ergebnisse TRUE – an diesen Tagen lagen die Views bei mindestens 100.
Ebenso kannst du zwei Vektoren oder sogar zwei Matrizen vergleichen.
youtube_views <- c(10,20,1000,64,100,9,19,3,90,4)
So kannst du dir schnell eine kleine Anwendung bauen, die zeigt, wann die Views deines DataCamp-Tutorials höher waren als die deiner YouTube-Videos – oder umgekehrt.
R vergleicht dabei Vektoren elementweise. Im folgenden Output hat das erste Element von datacamp_views den Wert 100, das erste von youtube_views den Wert 10 – deshalb ergibt der Vergleich TRUE.
datacamp_views > youtube_views
- TRUE
- FALSE
- FALSE
- TRUE
- FALSE
- TRUE
- TRUE
- TRUE
- TRUE
- TRUE
Vergleichen wir zum Abschluss noch zwei numerische Ausdrücke. Du erinnerst dich vielleicht an die Rechenregel Punkt-vor-Strich bzw. Klammern-vorher (BODMAS/PEMDAS). Nach derselben Regel werden die folgenden beiden R-Ausdrücke ausgewertet.
-6 * 5 + 2 >= -10 + 1 # Links wird gemäß BODMAS erst multipliziert, dann addiert.
FALSE
Meistere deine Datenkenntnisse mit DataCamp
Mehr als 10 Millionen Menschen lernen Python, R, SQL und andere technische Fertigkeiten in unseren praxisorientierten Kursen, die von Branchenexperten entwickelt wurden.

Matrizen vergleichen
R kann bei Vergleichen mit unterschiedlichen Datenstrukturen umgehen – nicht nur mit Vektoren. Auch Matrizen und relationale Operatoren funktionieren nahtlos zusammen.
Statt Vektoren (wie im vorherigen Beispiel) liegen die DataCamp- und YouTube-Daten nun in einer Matrix namens views. Die erste Zeile enthält die DataCamp-Informationen, die zweite Zeile die YouTube-Informationen. Du erstellst die Matrix mit der eingebauten R-Funktion matrix auf Basis der oben definierten Vektoren datacamp und youtube.
datacamp_views <- c(100,20,5,200,60,88,190,33,290,64)
youtube_views <- c(10,20,1000,64,100,9,19,3,90,4)
views <- matrix(c(datacamp_views, youtube_views), nrow = 2, byrow = TRUE)
views
| 100 | 20 | 5 | 200 | 60 | 88 | 190 | 33 | 290 | 64 |
| 10 | 20 | 1000 | 64 | 100 | 9 | 19 | 3 | 90 | 4 |
Finden wir heraus, wann die Views sowohl bei DataCamp als auch bei YouTube gleich 20 waren.
views == 20
| FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
| FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
Super. Damit kennst du die Funktionsweise relationaler Operatoren. Weiter geht’s mit logischen Operatoren.
Logische Operatoren
R hilft dir, die Ergebnisse relationaler Operatoren zu kombinieren. Dafür gibt es folgende logische Operatoren:
AND-Operator ( & )OR-Operator ( | )NOT-Operator ( ! )
Schauen wir uns jeden davon an.
- AND-Operator: Wie in anderen Sprachen nimmt der AND-Operator zwei logische Werte und liefert nur dann TRUE, wenn beide TRUE sind. Andernfalls ist das Ergebnis FALSE.
Schauen wir uns ein paar selbsterklärende Beispiele an.
TRUE & TRUE # 1.1 = 1
TRUE
TRUE & FALSE # 1.0 = 0
FALSE
FALSE & FALSE # 0.0 = 0
FALSE
FALSE & TRUE # 0.1 = 0
FALSE
Statt mit TRUE/FALSE kannst du diese Operatoren auch mit den Ergebnissen von Vergleichen kombinieren.
x <- 100
x < 200 & x >= 100 # x ist kleiner als 200 und größer-gleich 100, daher TRUE.
TRUE
x < 200 & x > 100 # Das ist FALSE, da der zweite Vergleich (x > 100) nicht erfüllt ist.
FALSE
- OR-Operator: Der OR-Operator ähnelt AND, mit dem Unterschied, dass der gesamte Ausdruck TRUE ist, wenn mindestens einer der logischen Werte TRUE ist.
Schauen wir uns wieder ein paar einfache Beispiele an.
TRUE | TRUE # 1 + 1 = 1
TRUE
TRUE | FALSE # 1 + 0 = 1
TRUE
FALSE | FALSE # 0 + 0 = 0
FALSE
FALSE | TRUE # 0 + 1 = 1
TRUE
Nehmen wir das gleiche Zahlenbeispiel wie oben, diesmal fällt das Ergebnis anders aus.
x <- 100
x < 200 | x > 100 # TRUE, denn schon die erste Bedingung (x < 200) ist erfüllt.
TRUE
- NOT-Operator: Der einfachste Operator – er negiert den logischen Wert, auf den er angewendet wird, also das Gegenteil des jeweiligen Ergebnisses.
Ein paar Beispiele:
a = 1
!a # Liefert FALSE, denn nicht-a wird als 0 interpretiert, also FALSE.
FALSE
a = 0
!a # Wie oben, hier TRUE, da a = 0 und nicht-a somit 1 ist.
TRUE
Ein paar typische Fälle mit R-Basisfunktionen:
is.numeric(5) # TRUE, denn 5 ist numerisch
TRUE
!is.numeric(5) # Negation ergibt FALSE
FALSE
is.numeric('aditya')
FALSE
Das folgende Beispiel ist nützlich, wenn du mit gemischten numerischen und textuellen Daten arbeitest und etwa Zeichenketten aus einer Liste herausfiltern und nur numerische Werte behalten willst.
!is.numeric('aditya')
TRUE
Zum Schluss schauen wir, wie logische Operatoren auf Vektoren und Matrizen wirken.
a <- c(FALSE, TRUE, FALSE)
b <- c(TRUE, TRUE, FALSE)
a & b # AND-Operator
- FALSE
- TRUE
- FALSE
a | b # OR-Operator
- TRUE
- TRUE
- FALSE
Wie die Outputs zeigen, arbeiten logische Operatoren – genau wie die relationalen – elementweise auf Vektoren.
Der NOT-Operator lässt sich jedoch immer nur auf einen einzelnen Vektor oder auf das Ergebnis zweier Vektoren anwenden.
!a
- TRUE
- FALSE
- TRUE
!b
- FALSE
- FALSE
- TRUE
Im nächsten Beispiel steht der NOT-Operator außerhalb der Klammern und wird somit auf das Ergebnis von a | b angewendet. Dieser Ausdruck lässt sich auch als NOR (Not-OR) bezeichnen.
!(a | b) # NOR-Operator
- FALSE
- FALSE
- TRUE
Bevor wir zu bedingten Anweisungen übergehen, eine kleine Übung.
Du hast denselben datacamp_views-Vektor wie oben. Lass uns mit der R-Funktion tail das letzte Element extrahieren.
last <- tail(datacamp_views,1)
print (last)
[1] 64
Finden wir heraus, ob das letzte Element unter 100 oder über 100 liegt.
last < 100 | last > 100
TRUE
Da der letzte Wert unter 100 liegt, ist eine der Bedingungen erfüllt und der Ausdruck ergibt TRUE.
Weiter geht’s mit dem letzten Thema dieses Tutorials: bedingte Anweisungen.
Bedingte Anweisungen
Bis hierhin kennst du relationale Operatoren, die zeigen, wie R-Objekte zueinander stehen, und logische Operatoren, mit denen du logische Werte kombinierst. R bietet dir eine Möglichkeit, all das zu verknüpfen und das Ergebnis zu nutzen, um das Verhalten deiner R-Skripte zu steuern. Damit zu den Anweisungen if und else.
Die Syntax der if-Bedingung lautet: if(condition){ // expression } Die if-Anweisung nimmt eine Bedingung in Klammern entgegen, typischerweise einen relationalen oder logischen Ausdruck. Ist die Bedingung TRUE, wird der R-Code in den geschweiften Klammern ausgeführt. Einfach, oder?
Ein Beispiel:
Angenommen, du hast eine Variable x mit dem Wert -10. Du prüfst, ob x größer als null ist, und negierst das mit NOT. Da die Bedingung TRUE ist, wird der Codeblock ausgeführt.
x <- -10
if (!x > 0){
print("x is a negative number")
}
[1] "x is a negative number"
Entfernst du das NOT, wird die Bedingung FALSE und der Code im Block wird nicht ausgeführt.
if (x > 0){
print("x is a positive number")
}
Die else-Anweisung ergänzt if: if(condition){ // expression1 }else{ // expression2 } Anders als if hat else keine eigene Bedingung, sondern gehört immer zu einem if. Der zu else gehörende Code wird ausgeführt, wenn die Bedingung des zugehörigen if nicht TRUE ist.
Nehmen wir das gleiche Beispiel mit if, um else zu zeigen.
x <- -10
if (x > 0){
print("x is a positive number")
}else{
print("x is a negative number")
}
[1] "x is a negative number"
Im obigen Beispiel traf die if-Bedingung nicht zu, daher wurde der else-Block ausgeführt.
Neben if und else gibt es else if, das zwischen if und else steht. Es wird ausgewertet, wenn die if-Bedingung nicht erfüllt ist. Kurz gesagt: else kommt zuletzt. if(condition){ // expression1 }else if(condition){ // expression2 }else{ // expression3 }
x <- 0
if (x > 0){
print("x is a positive number")
}else if (x == 0){
print("x is zero")
}else{
print("x is a negative number")
}
[1] "x is zero"
Ein typischer Grund für else if: Die Bedingungen schließen sich nicht gegenseitig aus, sie könnten gleichzeitig zutreffen. Ein Beispiel:
x <- 12
if (x %% 3 == 0){
print("x is divisible by 3")
}else if (x %% 4 == 0){
print("x is divisible by 4")
}else{
print("x is neither divisible by 3 nor by 4")
}
[1] "x is divisible by 3"
Hier wurde die if-Bedingung TRUE, daher verlässt R die Kontrollstruktur und prüft die weiteren Zweige nicht mehr – auch wenn else if ebenfalls TRUE wäre. Hättest du statt else if ein weiteres if verwendet, würden beide Blöcke ausgeführt.
Fazit
Glückwunsch – du hast das Tutorial abgeschlossen.
Dieses Tutorial ist ein guter Einstieg für alle, die die Programmiersprache R kennenlernen möchten. Als Übung kannst du relationale und logische Operatoren als Bedingungen in if/else-Strukturen einsetzen.
Weitere Themen wie Utilities in R und Machine Learning mit R folgen in zukünftigen Tutorials. Bleib dran.
Stell deine Fragen zu diesem Tutorial gern in den Kommentaren unten.
Wenn du mehr über R lernen möchtest, starte mit dem DataCamp-Kurs Intermediate R.