30
Grundlagen der R Programmiersprache Jonathan Harrington

Grundlagen der R Programmiersprache Jonathan Harrington

Embed Size (px)

Citation preview

Page 1: Grundlagen der R Programmiersprache Jonathan Harrington

Grundlagen der R Programmiersprache

Jonathan Harrington

Page 2: Grundlagen der R Programmiersprache Jonathan Harrington

ObjekteVektor

Besteht aus einem oder mehrerern Elementenx = 3meinedatei = c(10, 20, -4)foo = c("IPSK", "Phonetik", "Schellingstr 3", 2006, "WS")

Matrix

Logischer Vektor

Besteht aus TRUE und FALSE

Eine Zusammensetzung aus Vektoren

rbind() und cbind()

Page 3: Grundlagen der R Programmiersprache Jonathan Harrington

Vektoren: Zugriff auf Elemente

foo = c("IPSK", "Phonetik", "Schellingstr 3", 2006, "WS")

foo[2] foo[2:4]

foo[-3]Alle Elemente außer "Schellingstr 3"

Elemente 2 und 5

foo[c(2, 5)] odera = c(2, 5)foo[a]

Page 4: Grundlagen der R Programmiersprache Jonathan Harrington

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

Page 5: Grundlagen der R Programmiersprache Jonathan Harrington

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

Page 6: Grundlagen der R Programmiersprache Jonathan Harrington

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()

Page 7: Grundlagen der R Programmiersprache Jonathan Harrington

dimnames(mat2) = NULLmat2 [,1] [,2][1,] 10 -5[2,] 20 0[3,] 30 10

Dimensionen-Namen entfernen...

Page 8: Grundlagen der R Programmiersprache Jonathan Harrington

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

Page 9: Grundlagen der R Programmiersprache Jonathan Harrington

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

Page 10: Grundlagen der R Programmiersprache Jonathan Harrington

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 Reihen

apply(mat, 1, mean) x y 20.000000 1.666667

Zentralwert der Spalten

apply(mat, 2, median)[1] 2.5 10.0 20.0

Page 11: Grundlagen der R Programmiersprache Jonathan Harrington

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

Page 12: Grundlagen der R Programmiersprache Jonathan Harrington

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

Page 13: Grundlagen der R Programmiersprache Jonathan Harrington

Logische Vektoren

410 Vokal-Labelsvowlax.llength(vowlax.l)[1] 410

table(vowlax.l)vowlax.l a E I O 126 82 170 32

vowlax.fdat.5[1:3,]

eine 410 x 4 Matrix der F1-F4 Werte dieser Vokale zum zeitlichen Mittelpunkt

F1-F4 der ersten 3 Vokale

T1 T2 T3 T4897.5 562 1768 2379 33991127.5 648 1463 2523 33461462.5 684 1274 2505 3477

Dimension-namen (die Zeiten, zu denen diese Werte vorkommen)

die Werte dieser Vokale: vowlax.l[1:3]

Page 14: Grundlagen der R Programmiersprache Jonathan Harrington

Wir wollen den durchschnittlichen F2 aller "a“ Vokale berechnen.

Dafür werden logische Vektoren benötigt…

Page 15: Grundlagen der R Programmiersprache Jonathan Harrington

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

Page 16: Grundlagen der R Programmiersprache Jonathan Harrington

(T & F) | T

[1] TRUE

( (T | F ) & (T & T) | F)

[1] TRUE

Klammern

Material innerhalb ( ) wird zuerst bearbeitet

Page 17: Grundlagen der R Programmiersprache Jonathan Harrington

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()

Page 18: Grundlagen der R Programmiersprache Jonathan Harrington

Vergleichungs-Operator

x == y gleicht x y? != gleicht nicht

x < y ist 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

Page 19: Grundlagen der R Programmiersprache Jonathan Harrington

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

Page 20: Grundlagen der R Programmiersprache Jonathan Harrington

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

Page 21: Grundlagen der R Programmiersprache Jonathan Harrington

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

Page 22: Grundlagen der R Programmiersprache Jonathan Harrington

 

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?

Page 23: Grundlagen der R Programmiersprache Jonathan Harrington

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"

Page 24: Grundlagen der R Programmiersprache Jonathan Harrington

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"

Page 25: Grundlagen der R Programmiersprache Jonathan Harrington

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"

Page 26: Grundlagen der R Programmiersprache Jonathan Harrington

R-Befehle für: Wieviele Freunde brauchen weniger als 40 Minuten?

sum()

temp = zeit < 40

sum(temp)

[1] 3

Oder

sum(zeit < 40)

Page 27: Grundlagen der R Programmiersprache Jonathan Harrington

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

Page 28: Grundlagen der R Programmiersprache Jonathan Harrington

Die Elemente von Reihe 1, die größer als 30 sind (logischer Vektor verwenden)

temp = bridge[,1] > 30

bridge[temp,1]

1 2 3 4 5 6 35 68 94 90 76 62

Alle Reihen von bridge, für die die Werte in Reihe 1 größer als 30 sind

Mon Tues Wed1 35 1 12 68 5 73 94 4 274 90 27 685 76 28 876 62 62 108

bridge[temp,]

dim(bridge)

[1] 13 3

Mon Tues Wed0 9 1 01 35 1 12 68 5 73 94 4 274 90 27 685 76 28 876 62 62 1087 28 76 1118 27 90 579 4 94 2810 5 68 611 1 35 012 1 9 0

bridge

Page 29: Grundlagen der R Programmiersprache Jonathan Harrington

Logische Vektoren

vowlax.l

Ein Vektor von 410 Vokal-Etikettierungen

vowlax.fdat.5table(vowlax.l)

Eine Matrix der F1-F4 Werte zum zeitlichen Mittelpunkt

x = c(10, 15, 18)

mean(x)

dim(vowlax.fdat.5)

[1] 14.33333

F2- Durchschnitt aller "a" Vokale?

temp = vowlax.l == "a"mean(vowlax.fdat.5[temp,2])[1] 1437.214

Page 30: Grundlagen der R Programmiersprache Jonathan Harrington

Seite 31 von Aufgaben 1 (Vektoren) und 2 (Matrizen) von:

A sketch of the R Programming language and environment (in Harrington, J. forthcoming, The Phonetic Analysis of Speech Corpora. Blackwell): doc, pdf.

http://www.phonetik.uni-muenchen.de/~jmh/lehre/emur.htm