Grundlagen der R Programmiersprache
Jonathan Harrington und Tina John
IPDS, Kiel.
Objekte
Vektor
Besteht aus einem oder mehrerern Elementen
x = 3
meinedatei = c(10, 20, -4)
foo = c("Kiel", "Phonetik", "Gebaeude 10")
Matrix
Logischer Vektor
Besteht aus TRUE und FALSE
Wird verwendet, um auf Elemente unter gewissen Bedingungen zuzugreifen
Eine Zusammensetzung aus Vektoren
rbind()
und
cbind()Vektoren: Zugriff auf Elemente
datei = c("Kiel", "Phonetik", "Gebaeude 10", "Sprache", 2002)
datei[2] datei[2:4]
datei[-3]
Alle Elemente außer "Gebaeude 10"
Elemente 2 und 5
datei[c(2, 5)]
oder
a = c(2, 5) datei[a]
Arithmetische Funktionen
werden immer parallel auf Vektoren angewendet
> x = c(10, 20, 30)
> y = c(-5, 0, 10)
> x * y
[1] -50 0 300
Die length() Funktion
wieviele Elemente in einem Vektor?
> length(x)
[1] 3
> length(y)
[1] 3
> length(x)==length(y)
[1] TRUE
Matrizen
> a = c(10, 3, 8, 7)
> b = c(11, 45, 20, -1)
> x = rbind(a, b)
> x
[,1] [,2] [,3] [,4]
[1,] 10 3 8 7 [2,] 11 45 20 -1
rbind(): Reihenverbindung cbind(): Spaltenverbindung
> y = cbind(a, b)
> y
[1,] 10 11 [2,] 3 45 [3,] 8 20 [4,] 7 –1
Reihenanzahl
> nrow(x) [1] 2
Spaltenanzahl
> ncol(x) [1] 4
Dimensionenanzahl
> dim(x)
[1] 2 4
Arithmetische Vorgänge
Werden wie bei Vektoren parallel durchgeführt
> x
[,1] [,2] [,3] [,4]
10 3 8 7 11 45 20 -1
> x -20
[,1] [,2] [,3] [,4]
-10 -17 -12 -13 -9 25 0 -21
> x
[,1] [,2] [,3] [,4]
10 3 8 7 11 45 20 -1
> y
[,1] [,2] [,3] [,4]
20 6 16 14 22 90 40 -2
> x + y
[,1] [,2] [,3] [,4]
30 9 24 21 33 135 60 -3
Anwendung von arithmetischen Funktionen
> x
[,1] [,2] [,3] [,4]
10 3 8 7 11 45 20 -1
> mean(x) [1] 12.875
(Durchschnitt aller Elemente) Durchschnitt der Reihen
> apply(x, 1, mean) [1] 7.00 18.75
Zentralwert der Spalten
> apply(x, 2, median) [1] 10.5 24.0 14.0 3.0
Zugriff auf Elemente einer Matrix
> x
[,1] [,2] [,3] [,4]
10 3 8 7 11 45 20 -1
> x[2,4]
= Reihe 2, Spalte 4
[1] -1
Nur Reihe 2
> x[2,]
[1] 11 45 20 –1
Nur Spalte 3
> x[,3]
[1] 8 20
Zugriff auf Elemente einer Matrix
Reihen 2 und 3 Spalten 2 und 4
Reihen 2 und 3 von Spalten 3 bis 4 Spalten 2 und 4
Spalte 1 von Reihen 2 und 4 Spalten 1 bis 3 von allen
Reihen außer Reihe 2
> neumat[2:3,]
> neumat[,c(2,4)]
> neumat[2:3,3:4]
> neumat[,c(2,4)]
> neumat[c(2,4),1]
> neumat[-2,1:3]
neumat ist eine Matrix
Logische Vektoren
> labs
[1] "a" "e" "i" "e" "i" "a" "e"
"a" "a" "i"
> daten
Dauer F1 [1,] 33 979 [2,] 56 592 [3,] 37 224 [4,] 50 597 [5,] 49 281 [6,] 21 737 [7,] 38 520 [8,] 32 887 [9,] 21 755 [10,] 60 343
Wir möchten den
Durchschnittswert der Dauer aller /a/ Vokale berechnen.
Der Zugriff auf diese Daten erfolgt
durch logische Vektoren
Logischer Vektor
> temp = c(T, F, T)
> temp
[1] TRUE FALSE TRUE
= Ein Vektor aus TRUE und FALSE Elementen
| bedeutet "oder"
> T | T [1] T
> F | F [1] F
> T | F [1] T
& bedeutet "und"
> T & T [1] T
> F & F [1] F
> T & F [1] F
Das Ergebnis von TRUE und
TRUE ist TRUE
Logische Vektoren folgen einer Boolean-Logik
> (T & F) | T [1] TRUE
> ( (T | F ) & (T & T) | F) [1] TRUE
Klammern
Material innerhalb ( ) wird zuerst bearbeitet
Wieviele T? Wieviele F?
sum()
> any(vec) [1] TRUE
> any(!vec) [1] TRUE
Logische Vektoren, sum() und any()
> vec _ c(F, F, F, F)
> any(vec) [1] FALSE
> any(!vec) [1] TRUE
Gibt es mindestens ein T? Oder mindestens ein F?
> sum(any(!vec)) [1] 1
> vec = c(T, T, F, T, F)
> sum(vec) [1] 3
> sum(!vec) [1] 2
any()
Vergleichungs-Operator
x == y gleicht x y?
!= gleicht nicht x < yist x weniger als y?
> größer als<= weniger oder gleicht x %in% y
ist y in x enthalten?
> x = c(10, 20, 30)
> y = 20
> x == y
[1] FALSE TRUE FALSE
> X == 20
[1] FALSE TRUE FALSE
Erster Fall: y besteht aus einem Element
Vergleichungs-Operator
Zweiter Fall. x und y sind zueinander
parallel (und bestehen daher aus der selben Anzahl von Elementen)
> x = c(10, 20, 30)
> y = c(9, 50, 30)
> x == y
[1] FALSE FALSE TRUE
Vergleichungs-Operator
%in%
> labs %in% "E"
(wo kommt "E" in labs vor?)
> labs = c("I", "E", "O", "O", "O","I", "E")
[1] FALSE TRUE FALSE FALSE FALSE FALSE TRUE
> labs %in% c("I", "E")
(wo kommen "E" oder "I" in labs vor?)
[1] TRUE TRUE FALSE FALSE FALSE TRUE TRUE
> y = c("I", "E")
Dasselbe:
> labs %in% y
[1] TRUE TRUE FALSE FALSE FALSE TRUE TRUE
> x _ c(23, 5, 45, -10, 11)
> lvec = x > 20
[1] TRUE FALSE TRUE FALSE FALSE
> x[lvec]
bedeutet: die Elemente in x, für die lvec TRUE ist
Zugriff auf Elemente durch [logische Vektoren]
[1] 23 45
> x[!lvec]
[1] 5 -10 11
Meine Freunde
> freunde = c("Paul", "Karin", "Elke", "Georg", "Peter")
Die Dauer in Minuten ihrer Reise in die Arbeit
> zeit = c(50, 11, 35, 41, 12)
Welche Dauern sind größer als 40?
> temp = zeit > 40
[1] TRUE FALSE FALSE TRUE FALSE
> temp
> freunde[temp]
Was ist (a) die Bedeutung (in Wörtern) und (b) das Ergebnis von:
(a) Bedeutung: die Freunde, die länger als 40 Minuten brauchen, um in die Arbeit zu kommen.
(b)
[1] "Paul" "Georg"> freunde = c("Paul", "Karin", "Elke", "Georg", "Peter")
> zeit = c(50, 11, 35, 41, 12)
Schreiben Sie R-Befehle für: Welche Freunde brauchen 41 Minuten, um in die Arbeit zu kommen?
> temp = zeit == 41
> freunde[temp]
[1] "Georg"
oder
> freunde[zeit == 41]
[1] "Georg"
Schreiben Sie R-Befehle für: Welcher Freund braucht am längsten?
Hier muss auch die
max()Funktion verwendet werden:
> y = c(10, 20, 30)
> max(y) [1] 30
> temp = zeit == max(zeit)
> freunde[temp]
[1] "Paul"
Oder
> freunde[zeit == max(zeit)]
[1] "Paul"
R-Befehle für: welcher Freund braucht zwischen 25 und 45 Minuten?
• (die Freunde, die mehr als 25 Minuten brauchen)
&
• (die Freunde, die weniger als 45 Minuten brauchen)
> temp = (zeit > 25) & (zeit < 45)
> freunde[temp]
[1] "Elke" "Georg"
R-Befehle für: Wieviele Freunde brauchen weniger als 40 Minuten?
sum()
> temp = zeit < 40
> sum(temp) [1] 3
Oder
> sum(zeit < 40)
Gibt es Freunde, die mehr als 45 Minuten brauchen?
any()
> temp = zeit > 45
> any(temp) [1] TRUE
oder in einer Zeile:
> any(zeit > 45) [1] TRUE