schleifen in r
DESCRIPTION
for-Schleife in TTRANSCRIPT
Schleifen Mark Heckmann
University of Bremen, Germany www.markheckmann.de
Version Januar, 2014
© CC BY-NC 2.0 DE
Übliche Situation beim Rekodieren
library(car)!!rec <- "3=1; 2=2; 1=3; else=NA" !x[ , 1] <- recode(x[ , 1], rec)!x[ , 2] <- recode(x[ , 2], rec)!x[ , 3] <- recode(x[ , 3], rec)!x[ , 4] <- recode(x[ , 4], rec)!x[ , 5] <- recode(x[ , 5], rec)!...!
Die Variablen in den Spalten 1 bis 10 sollen auf die gleiche Art rekodiert werden!
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 for-Schleife
Grundstruktur der for-Schleife
for (Steuervariable in Vektor) {!!R Befehl!!R Befehl!!...!
}
Beliebiger Name, häufig i!
Ein Vektor (numerisch,
Zeichen, logisch!
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
a <- 10!a!print(a)!
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.!
Exkurs print Funktion
for (i in 1:3) {!!i!
}!
for (i in 1:3) {!!print(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,!
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!
Rekodiere die Werte der Variablen des Datensatzes attitude wie folgt mit Hilfe einer for-Schleife
[0, 30] = 1 ]30, 60] = 2 ]60, 100] = 3
Your turn
Zeichenvektor
for (buchstabe in c("a","b","c")) {!!print(buchstabe)!
}!
Die Werte, die die Steuervariable durchläuft müssen nicht numerisch sein.!
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]
Your turn
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!
}!
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?
Your turn
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.!
Anwendung: Datensätze verbinden
Schreibe eine Schleife, die alle Dateien automatisiert
zusammenfügt
Your turn