Schleifen
Mark Heckmann
University of Bremen, Germany
www.markheckmann.de
Version Januar, 2014
© CC BY-NC 2.0 DE
Übliche Situation beim Rekodieren
Die Variablen in den Spalten 1 bis 10
sollen auf die gleiche Art rekodiert
werden!
library(car)!
!
rec <- "3=1; 2=2; 1=3;
x[ , 1] <- recode(x[ ,
x[ , 2] <- recode(x[ ,
x[ , 3] <- recode(x[ ,
x[ , 4] <- recode(x[ ,
x[ , 5] <- recode(x[ ,
...!

else=NA" !
1], rec)!
2], rec)!
3], rec)!
4], rec)!
5], rec)!
Vereinfachung durch for-Schleife

rec <- "3=1; 2=2; 1=3; else=NA" !
!
for (i in 1:10) {!
!x[ , i] <- recode(x[ , i], rec)!
}!
Schleifen dienen dazu Codeblöcke
zu wiederholen
Bei jeden Durchlauf werden meist
kleiner Änderungen (z.B.
Variablenname) vorgenommen
Die forSchleife
Grundstruktur der for-Schleife
Beliebiger Name,
häufig i!

Ein Vektor
(numerisch,
Zeichen, logisch!

for (Steuervariable in Vektor) {!
!R Befehl!
!R Befehl!
!...!
Code, der bei
jedem Durchlauf
}

ausgeführt wird!
Grundstruktur der for-Schleife
for (i in 1:3) {!
!i!
}!
!

Kein Fehler und trotzdem sehen wir
nichts. Wieso?!
Exkurs print Funktion
Wann immer etwas in R eingeben und Enter
drücken, erfolgt eine Ausgabe in der Konsole.
Dies Ausgabe wird von der Funktion print
erzeugt. Die Funktion print wird immer
„heimlich“ aufgerufen, wenn wir Enter
drücken. Man kann dies jedoch auch explizit
tun.!
a <- 10!
a!
print(a)!
Exkurs print Funktion
for (i in 1:3) {!
!i!
}!

In Schleifen wird die print Funktion nicht
mehr automatisch aufgerufen. Deshalb
müssen wir dies explizit tun, wenn wir
etwas in die Konsole schreiben wollen,!
for (i in 1:3) {!
!print(i)
!!
}
Grundstruktur der for-Schleife
for (i in 1:3) {!
!print(i)!
}!
!

Die Steuervariable i nimmt der Reihe
nach die Werte in dem Vektor (hier
1:3) an. !
Im ersten Durchlauf die 1, im zweiten
die 2, im dritten die 3. Fertig.
Vereinfachung durch for-Schleife
rec <- "3=1; 2=2; 1=3; else=NA" !
!
for (i in 1:10) {!
!x[ , i] <- recode(x[ , i], rec)!
}!
Neues Spalte i in
jedem Durchlauf!
Your turn
Rekodiere die Werte der Variablen
des Datensatzes attitude wie
folgt mit Hilfe einer for-Schleife
[0, 30] = 1
]30, 60] = 2
]60, 100] = 3
Zeichenvektor
Die Werte, die die Steuervariable
durchläuft müssen nicht numerisch sein.!
for (buchstabe in c("a","b","c")) {!
!print(buchstabe)!
}!
Your turn
Rekodiere die Werte der Variablen
des Datensatzes attitude wie
zuvor mit Hilfe einer for-Schleife.
Nutze jedoch diesmal die
Variablennamen in der Schleife.
[Hinweis: names() nutzen]
Anwendung: Indizieren
Durch die for-Schleife werden sukzessiv
die Indizes 1 bis 10 durchlaufen.
a <- NA !
for (i in 1:10) {!
!a[i] <- i^2!
}!
Your turn
Generiere 1000 Mal 25 zufällige
Werte ~ N(100,15), berechne
jeweils den Mittelwert und
speichere das Ergebnis. Berechne
anschließend die Streuung der
Ergebnisse. Wie groß müsste die
Streuung theoretisch sein?
Anwendung: Datensätze verbinden
Wir haben einen Ordner mit vielen
Teildatensätzen
files <- dir()!
files!
!
[1] "2373254.csv" "2828478.csv" !
[3] "2828808.csv" "2828829.csv" !
[5] "2828860.csv" "2829204.csv" !
...!
Anwendung: Datensätze verbinden
Diese sollen zu einem großen Datensatz
zusammengefügt werden
files <- dir()!
!
d <- NULL!
!
x <- read.csv2(files[1])!
d <- rbind(d, x)!
!
x <- read.csv2(files[2])!
d <- rbind(d, x)!
!
etc.!
Your turn
Schreibe eine Schleife, die
alle Dateien automatisiert
zusammenfügt

Schleifen in R

  • 1.
    Schleifen Mark Heckmann University ofBremen, Germany www.markheckmann.de Version Januar, 2014 © CC BY-NC 2.0 DE
  • 2.
    Übliche Situation beimRekodieren Die Variablen in den Spalten 1 bis 10 sollen auf die gleiche Art rekodiert werden! library(car)! ! rec <- "3=1; 2=2; 1=3; x[ , 1] <- recode(x[ , x[ , 2] <- recode(x[ , x[ , 3] <- recode(x[ , x[ , 4] <- recode(x[ , x[ , 5] <- recode(x[ , ...! else=NA" ! 1], rec)! 2], rec)! 3], rec)! 4], rec)! 5], rec)!
  • 3.
    Vereinfachung durch for-Schleife rec<- "3=1; 2=2; 1=3; else=NA" ! ! for (i in 1:10) {! !x[ , i] <- recode(x[ , i], rec)! }!
  • 4.
    Schleifen dienen dazuCodeblöcke zu wiederholen Bei jeden Durchlauf werden meist kleiner Änderungen (z.B. Variablenname) vorgenommen
  • 5.
  • 6.
    Grundstruktur der for-Schleife BeliebigerName, häufig i! Ein Vektor (numerisch, Zeichen, logisch! for (Steuervariable in Vektor) {! !R Befehl! !R Befehl! !...! Code, der bei jedem Durchlauf } ausgeführt wird!
  • 7.
    Grundstruktur der for-Schleife for(i in 1:3) {! !i! }! ! Kein Fehler und trotzdem sehen wir nichts. Wieso?!
  • 8.
    Exkurs print Funktion Wannimmer etwas in R eingeben und Enter drücken, erfolgt eine Ausgabe in der Konsole. Dies Ausgabe wird von der Funktion print erzeugt. Die Funktion print wird immer „heimlich“ aufgerufen, wenn wir Enter drücken. Man kann dies jedoch auch explizit tun.! a <- 10! a! print(a)!
  • 9.
    Exkurs print Funktion for(i in 1:3) {! !i! }! In Schleifen wird die print Funktion nicht mehr automatisch aufgerufen. Deshalb müssen wir dies explizit tun, wenn wir etwas in die Konsole schreiben wollen,! for (i in 1:3) {! !print(i) !! }
  • 10.
    Grundstruktur der for-Schleife for(i in 1:3) {! !print(i)! }! ! Die Steuervariable i nimmt der Reihe nach die Werte in dem Vektor (hier 1:3) an. ! Im ersten Durchlauf die 1, im zweiten die 2, im dritten die 3. Fertig.
  • 11.
    Vereinfachung durch for-Schleife rec<- "3=1; 2=2; 1=3; else=NA" ! ! for (i in 1:10) {! !x[ , i] <- recode(x[ , i], rec)! }! Neues Spalte i in jedem Durchlauf!
  • 12.
    Your turn Rekodiere dieWerte der Variablen des Datensatzes attitude wie folgt mit Hilfe einer for-Schleife [0, 30] = 1 ]30, 60] = 2 ]60, 100] = 3
  • 13.
    Zeichenvektor Die Werte, diedie Steuervariable durchläuft müssen nicht numerisch sein.! for (buchstabe in c("a","b","c")) {! !print(buchstabe)! }!
  • 14.
    Your turn Rekodiere dieWerte der Variablen des Datensatzes attitude wie zuvor mit Hilfe einer for-Schleife. Nutze jedoch diesmal die Variablennamen in der Schleife. [Hinweis: names() nutzen]
  • 15.
    Anwendung: Indizieren Durch diefor-Schleife werden sukzessiv die Indizes 1 bis 10 durchlaufen. a <- NA ! for (i in 1:10) {! !a[i] <- i^2! }!
  • 16.
    Your turn Generiere 1000Mal 25 zufällige Werte ~ N(100,15), berechne jeweils den Mittelwert und speichere das Ergebnis. Berechne anschließend die Streuung der Ergebnisse. Wie groß müsste die Streuung theoretisch sein?
  • 17.
    Anwendung: Datensätze verbinden Wirhaben einen Ordner mit vielen Teildatensätzen files <- dir()! files! ! [1] "2373254.csv" "2828478.csv" ! [3] "2828808.csv" "2828829.csv" ! [5] "2828860.csv" "2829204.csv" ! ...!
  • 18.
    Anwendung: Datensätze verbinden Diesesollen zu einem großen Datensatz zusammengefügt werden files <- dir()! ! d <- NULL! ! x <- read.csv2(files[1])! d <- rbind(d, x)! ! x <- read.csv2(files[2])! d <- rbind(d, x)! ! etc.!
  • 19.
    Your turn Schreibe eineSchleife, die alle Dateien automatisiert zusammenfügt