3  Rechnen mit R

R funktioniert unter anderem wie ein mächtiger Taschenrechner. Folgende grundlegende mathematische Operationen können mit R ausgeführt werden:

Operation Symbol
Addition +
Subtraktion \(-\)
Multiplikation *
Division /
Potenzieren ^ oder **
Wurzel sqrt(x)


Hier ein paar Beispiele:

# Addition 
2+8
## [1] 10
# Subtraktion 
9-7
## [1] 2
# Multiplikation 
4*4
## [1] 16
# Division 
6/2
## [1] 3
# Potenzieren 
2^3
## [1] 8
# Exponent anders notiert 
2**3
## [1] 8
# Quadratwurzel 
sqrt(25)
## [1] 5

Vielleicht haben Sie sich schon gefragt, wieso vor jeder Ausgabe die Zeichenkette ## [1] steht. Die Rauten ## sehen Sie in Ihrer R Konsole nicht. Sie wurden von quarto (siehe Kapitel 20) für diese Webseitenversion des Buches erzeugt um anzugeben, dass es sich um eine R-Ausgabe handelt, und nicht um R-Befehle. So kann auch nichts schief gehen, falls Sie Code-Chunks von dieser Seite markieren, kopieren und in Ihre Scriptdatei übertragen, denn dort kommentieren die ## die Zeile aus, so dass sie nicht ausgeführt werden.

Die [1] erklärt sich folgendermaßen. In R beginnt jede Ausgabezeile mit der Position des Wertes, der als nächstes ausgegeben wird. Da wir derzeit nur Rechenoperationen durchführen, die genau ein Ergebnis haben, ist die Position unseres Ergebniswertes immer [1]. Hat man längere Datenreihen, z.B. das Gewicht von 10 Probanden in kg, dann könnte die Ausgabe so aussehen:

## [1] 102.20  76.83  98.50  86.55  121.93
## [6]  89.21 123.22  78.23  98.33   83.37

Die zweite Ausgabezeile beginnt mit einer [6], was bedeutet, dass nachfolgend die 6. Position der Wertereihe angezeigt wird.

Das Ziehen einer Wurzel erfolgt über die Funktion sqrt(). Damit Funktionen arbeiten können, benötigen sie ein “Argument”. Das Argument ist in unserem Fall die Zahl 25, da wir die Wurzel aus 25 ziehen wollen.

# Wurzel ziehen 
sqrt(25)
## [1] 5

Argumente werden der Funktion in runden Klammern übergeben. So erklärt sich der Befehl sqrt(25).

# Lange Formel 
sqrt( (2*10) / (20/2) ) - 9
## [1] -7.585786
# Befehl schlägt fehl!
2,3 - 9
## Error: <text>:2:2: Unerwartete(s) ','
## 1: # Befehl schlägt fehl!
## 2: 2,
##     ^

An der letzten Ausgabe zeigt sich ein wesentliches Merkmal von R:

Dezimalstellen werden mit einem Punkt UND NICHT mit einem Komma dargestellt!

Dies ist ein häufiger Anfängerfehler und meist der Grund, warum am Anfang etwas nicht funktioniert.

# Dezimalstellen mit . 
4.25 * 6.25
## [1] 26.5625
# nicht mit Komma!
# schlägt fehl
4,25 * 6,78 
## Error: <text>:3:2: Unerwartete(s) ','
## 2: # schlägt fehl
## 3: 4,
##     ^

Weitere mathematische Funktionen sind:

Funktion Befehl Beispiel Ausgabe
Exponentialfunktion exp() exp(2) [1] 7.389056
natürlicher Logarithmus log() log(2) [1] 0.6931472
Logarithmus zur Basis 2 log2() log2(3) [1] 1.584963
Logarithmus zur Basis 10 log10() log10(3) [1] 0.4771213
Sinus sin() sin(2) [1] 0.9092974
Kosinus cos() cos(2) [1] -0.4161468
Tangens tan() tan(2) [1] -2.18504
Absolutwert abs() abs(-7) [1] 7

3.1 Nachkommastellen

R zeigt standardmäßig 6 Nachkommastellen an. Intern rechnet R mit “doppelter Genauigkeit”. Damit sind Nummern mit ca. 17 Stellen (1 Ziffer + 16 Nachkommastellen oder eben eine 17 stellige Zahl ohne Nachkommastellen) repräsentierbar. Möchte man die Nachkommastellen entsprechend angezeigt bekommen, so kann man dies mit der options-Funktion einstellen:

# gib ab jetzt 16 Nachkommastellen aus 
options(digits=17)
# Wurzel aus 3 
sqrt(3)
## [1] 1.7320508075688772

Nach dieser Eingabe liefert R Ergebnisse mit bis zu 16 Nachkommastellen.

Wir stellen den Wert wieder zurück auf 6 Nachkommastellen.

# gib ab jetzt wieder "nur" 6 Nachkommastellen aus
options(digits=7)

3.2 Runden

Ziehen wir die Wurzel aus 3, erhalten wir ein Ergebnis mit 6 Nachkommastellen.

# Wurzel aus 3 
sqrt(3)
## [1] 1.732051

Dieses Ergebnis kann mit der Funktion round() gerundet werden.

# Runde auf 2 Nachkommastellen 
round(sqrt(3), digits=2)
## [1] 1.73
# Runde auf ganze Zahl 
round(sqrt(3))
## [1] 2

Neben round() existieren noch die Spezialfunktionen ceiling() und floor(). Die Funktion ceiling() rundet immer zur nächsten ganzen Zahl auf, und die Funktion floor() rundet immer zur nächsten ganzen Zahl ab.

# ceiling rundet immer auf 
ceiling(sqrt(3))
## [1] 2
# ceiling rundet immer auf 
ceiling(1.0008)
## [1] 2
# floor rundet immer ab 
floor(sqrt(3))
## [1] 1
# floor rundet immer ab floor(1.9999)