Post on 18-Mar-2016
description
Grundlagen der R Programmiersprache
Modul G WS 07/08
ObjekteVektorBesteht aus einem oder mehrerern Elementenx = 3meinedatei = c(10, 20, -4)foo = c("IPDS", "Phonetik", “Leibnizstr. 10", 2007, "WS")
Matrix
Logischer VektorBesteht aus TRUE und FALSE
Eine Zusammensetzung aus Vektoren
rbind() und cbind()
SkalarEine skalare Variable speichert eine einzelne Zahl (Skalar).
Vektoren: Zugriff auf Elemente
foo = c("IPDS", "Phonetik", "Leibnizstr. 10", 2007, "WS")
foo[2] foo[2:4]
foo[-3]Alle Elemente außer “Leibnizstr. 10"
Elemente 2 und 5
foo[c(2, 5)] odera = c(2, 5)foo[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() Funktionwieviele Elemente in einem Vektor?
length(x)[1] 3length(y)[1] 3length(x)==length(y)[1] TRUE
Matrizen
x = c(10, 20, 30)y = c(-5, 0, 10)mat = rbind(x, y)
mat [,1] [,2] [,3]x 10 20 30y -5 0 10
rbind(): Reihenverbindung cbind(): Spaltenverbindung
mat2 = cbind(x, y)
mat2 x y[1,] 10 -5[2,] 20 0[3,] 30 10
Reihenanzahlnrow(mat)[1] 2Spaltenanzahlncol(mat)[1] 3
Dimensionenanzahldim(mat)[1] 2 3
Matrizen und Dimensionennamen
mat2 x y[1,] 10 -5[2,] 20 0[3,] 30 10
xnamen = c("Gruppe A", "Gruppe B", "Gruppe C")ynamen = c("Erg. 1", "Erg. 2")dimnames(mat2) = list(xnamen, ynamen)mat2 Erg. 1 Erg. 2Gruppe A 10 -5Gruppe B 20 0Gruppe C 30 10
Dimensionen-Namen geben: dimnames()
dimnames(mat2) = NULLmat2 [,1] [,2][1,] 10 -5[2,] 20 0[3,] 30 10
Dimensionen-Namen entfernen...
Matrizen und Arithmetische Vorgänge
werden wie bei Vektoren parallel durchgeführt
mat [,1] [,2] [,3]x 10 20 30y -5 0 10
mat -20 [,1] [,2] [,3]x -10 0 10y -25 -20 -10
a [,1] [,2] [,3] [,4] 10 3 8 7 11 45 20 -1b [,1] [,2] [,3] [,4] 20 6 16 14 22 90 40 -2 a + b [,1] [,2] [,3] [,4] 30 9 24 21 33 135 60 -3
Anwendung von Funktionen auf Matrizen
mat [,1] [,2] [,3]x 10 20 30y -5 0 10mean(mat)[1] 10.83333(Durchschnitt aller Elemente)
Durchschnitt der Reihenapply(mat, 1, mean) x y 20.000000 1.666667
Zentralwert der Spalten
apply(mat, 2, median)[1] 2.5 10.0 20.0
Zugriff auf Elemente einer Matrix
mat [,1] [,2] [,3]x 10 20 30y -5 0 10 mat[2,3] bedeutet: Reihe 2, Spalte 3[1] 10
Nur Reihe 2mat[2,][1] -5 0 10Nur Spalte 3mat[,3] x y 30 10
Reihen: Vor dem Komma
Spalten: Nach dem Komma
Vektoren: Eine einzige Zahl OHNE KOMMA
Zugriff auf Elemente einer Matrix
Reihen 2 bis 8
Spalten 1 und 3
Reihen 2 bis 8 von Spalten 1 und 3
Spalte 1 von Reihen 2 und 4
Reihen 1-3 aller Spalten außer Spalte 2
bridge[2:8,]
bridge[,c(1,3)]
bridge[2:8,c(1,3)]
bridge[c(2,4),1]
bridge[1:3,-2]
bridge ist eine Matrix
Logischer Vektor
temp = c(T, F, T)temp[1] TRUE FALSE TRUE
= Ein Vektor aus TRUE und FALSE Elementen
| bedeutet "oder"T | T [1] TF | F [1] FT | F [1] T
& bedeutet "und"T & T [1] TF & F [1] FT & 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] TRUEany(!vec)[1] TRUE
Logische Vektoren, sum() und any()
vec2 = c(F, F, F, F)
any(vec2)[1] FALSEany(!vec2)[1] TRUE
Gibt es mindestens einen T? Oder mindestens einen F?
sum(any(!vec2))
[1] 1
vec = c(T, T, F, T, F)sum(vec)[1] 3sum(!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 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 = c("I", "E", "O", "O", "O","I", "E")
labs %in% "E" (kommt "E" in labs vor?)[1] FALSE TRUE FALSE FALSE FALSE FALSE TRUE
labs %in% c("I", "E") (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
Zugriff auf Elemente durch [logische Vektoren]
> x[lvec] bedeutet: die Elemente in x, für die lvec TRUE ist
[1] 23 45
x[!lvec]
[1] 5 -10 11
Meine Freundefreunde = c("Paul", "Karin", "Elke", "Georg", "Peter")Die Dauer (Min.) um in die Arbeit zu kommenzeit = c(50, 11, 35, 41, 12)
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"
Welche Dauern sind größer als 40?
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 == 41freunde[temp][1] "Georg"
oderfreunde[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"Oderfreunde[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
Odersum(zeit < 40)
Gibt es Freunde, die mehr als 45 Minuten brauchen?
any()
temp = zeit > 45any(temp)[1] TRUE oder in einer Zeile: any(zeit > 45)[1] TRUE