Grundlagen der R Programmiersprache - IPdS in Kiel · Grundlagen der R Programmiersprache Jonathan...
Transcript of Grundlagen der R Programmiersprache - IPdS in Kiel · Grundlagen der R Programmiersprache Jonathan...
Grundlagen der R Programmiersprache
Jonathan Harrington und Tina John
IPDS, Kiel.
ObjekteVektorBesteht aus einem oder mehrerern Elementenx = 3meinedatei = c(10, 20, -4)foo = c("Kiel", "Phonetik", "Gebaeude 10")
Matrix
Logischer Vektor
Besteht aus TRUE und FALSEWird verwendet, um auf Elemente unter gewissenBedingungen 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)] odera = c(2, 5)datei[a]
Arithmetische Funktionenwerden immer parallel auf Vektoren angewendet
> x = c(10, 20, 30)> y = c(-5, 0, 10)> x * y
[1] -50 0 300
Die length() Funktionwieviele 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ängeWerden wie bei Vektoren parallel durchgeführt
> x[,1] [,2] [,3] [,4]
10 3 8 711 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 711 45 20 -1
> y[,1] [,2] [,3] [,4]
20 6 16 1422 90 40 -2
> x + y[,1] [,2] [,3] [,4]
30 9 24 2133 135 60 -3
Anwendung von arithmetischen Funktionen
> x [,1] [,2] [,3] [,4]10 3 8 711 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 711 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 allenReihen 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"
> datenDauer 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 Daueraller /a/ Vokale berechnen.
Der Zugriff auf diese Daten erfolgtdurch 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 nichtx < y ist x weniger als y? > größer als
<= weniger oder gleichtx %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 zueinanderparallel (und bestehen daher aus der selbenAnzahl 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 Minutenbrauchen, 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 brauchtam längsten?Hier muss auch die max() Funktion verwendetwerden:> 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
Bitte Fragen auf Seiten 21/22 in R.doc/pdf beantworten, und das gesamte Dokument lesen/in R ausprobieren