¨Ubungen zu Programmierung mit R – Teil 2 - Fakultät Statistik

Dr. Uwe Ligges
M.Sc. Ieva Zelo u.v.a.
SoSe 2015
Fakult¨at Statistik
TU Dortmund
¨
Ubungen
zu Programmierung mit R – Teil 2
Blatt 2
Wichtig: Wenn in der Aufgabenstellung der Name f¨
ur die zu programmierende Funktion angegeben ist, dann verwenden Sie bitte auch diesen.
Aufgabe 6 (2 + 2 + 1 + 1 = 6 Punkte)
¨
Betrachten Sie Aufgabe 23 von Ubungsblatt
Nr. 9 aus dem Wintersemester (Sie d¨
urfen Ihre
damalige Abgabe oder aber die zugeh¨
orige Musterl¨osung erweitern):
Der Datensatz beav1 (in Paket MASS enthalten und l¨asst sich mit dem Befehl data() laden)
enth¨alt Messungen der K¨
orpertemperatur (und drei weitere Variablen) von einem Biberweibchen
aus dem Jahr 1990 (siehe auch ?beav1). Die ersten vier Aufgabenstellungen dazu waren:
• Aus den Spalten f¨
ur Datum (day) und Uhrzeit (time) der Messungen l¨asst sich mit Hilfe
der Funktion paste() (siehe Hilfe!) eine gemeinsame Zeichenkette erzeugen. Wandeln Sie
diese anschließend zu einer Datumsvariable im POSIXct-Format um.
Tipp: Hierbei k¨
onnte ganzzahlige Division/Modulo von Nutzen sein!
• Plotten Sie die K¨
orpertemperatur (temp) mithilfe der Datumsvariable u
¨ber die Zeit. Schauen
Sie, wie die Argumente type = "h" und type = "l" das Erscheinungsbild ¨andern. Was
bevorzugen Sie?
• Berechnen Sie folgende Quantile der K¨orpertemperatur, zeichnen sie als farbig markierte
Grenzwerte in die Grafik ein und beschriften sie mit ihrem Wert (in °C): 0.01, 0.25, 0.5,
0.75, 0.99.
• Markieren Sie K¨
orpertemperaturen u
¨ber dem 99%-Quantil mit Datum (Tag und Monat)
und Uhrzeit (Stunde und Minute).
a) Schreiben Sie jetzt eine Funktion plotBiber(), die die oben genannten Schritte bei Aufruf
von plotBiber(beav1) durchf¨
uhrt. Schritt 4 soll nat¨
urlich nur ausgef¨
uhrt werden, wenn solche
Tage existieren. Verwenden Sie in Ihrer Funktion f¨
ur die Grafik den type = "h".
b) Der Plot soll als Voreinstellung den Titel K¨orpertemperatur von Bibern“ bekommen und die
”
y-Achse soll h¨
ochstens ab 36 und mindestens bis zum Grenzwert 38 laufen. Beides soll aber
von Benutzern, die Ihre Funktion verwenden, ver¨anderbar sein. Die y-Achse soll hierbei nicht
beschriftet sein.
c) Weiterhin sollen Nutzer die M¨
oglichkeit haben, weitere Grafikargumente in Ihrer Funktion
plotBiber() anzugeben, wie zum Beispiel (aber nicht nur) lwd, lty, und cex.
d) Testen Sie, ob nach der Eingabe der Zeile
beav2 <- beav1[1:50,]
1
die Funktion auch bei Aufruf von
plotBiber(beav2)
¨
vern¨
unftige Ergebnisse liefert. Uberlegen
Sie sich auch weitere Tests, um die allgemeine Funktionsf¨ahigkeit u
ufen zu k¨
onnen.
¨berpr¨
Aufgabe 7– Rekursion (2 + 2 + 2 = 6 Punkte)
a) Schreiben Sie eine Funktion recsum, die eine rekursive Version der Summenfunktion darstellt.
Gehen Sie dazu anhand der folgenden rekursiven Definition vor:
(
n
X
x1
falls n = 1
xi :=
,
Pn−1
xn + i=1 xi falls n > 1
i=1
wobei x1 , . . . , xn ∈
R die n ∈ N zu summierenden Elemente darstellen.
b) Schreiben Sie nun eine Funktion itsum, die eine iterative Version der Summenfunktion darstellt.
c) Testen Sie die Funktionen recsum und itsum und vergleichen Sie mit der vorhandenen Funktion sum, indem Sie die Summen der auf folgende Weise erzeugten Vektoren berechnen:
set.seed(1234)
x1 <- rnorm(100,1,0.01)
x2 <- rnorm(1000,1,0.01)
x3 <- rnorm(4000,1,0.01)
x4 <- rnorm(10000,1,0.01)
Was f¨allt Ihnen auf? Wie k¨
onnen Sie evtl. auftretende Probleme l¨osen?
Aufgabe 8– Scoping Rules (1 + 2 + 1 = 4 Punkte)
Gegeben ist der folgende Codeblock, den Sie auch in der Datei \\server01\lehre\
ProgrammierenR\Daten\scope8.R finden:
g <- function(x) {
x + y^2
}
f <- function(x) {
y <- 1
g(x)
}
f(1)
a) Erkl¨aren Sie warum das Auswerten der Funktion f eine Fehlermeldung ausgibt.
2
b) Geben Sie min. 2 M¨
oglichkeiten an, so dass das y aus der Umgebung von f in g verwendet
werden kann.
c) Erkl¨aren Sie, warum die Linie f¨
ur den Mittelwert der y Werte im folgenden Codeblock, den Sie
auch in der Datei \\server01\lehre\ProgrammierenR\Daten\myplot8.R finden, tats¨achlich
rot ist und woher der Aufruf von myline den Mittelwert der y Werte kennen kann:
myplot <- function(x, y, col = "red") {
plot(x, y)
mittellinie <- function() abline(h = mean(y), col = col)
return(mittellinie)
}
myline <- myplot(1:10, 1:10)
myline()
Abgabetermin
¨
Abgabe in elektronischer Form bis sp¨atestens am Tag nach Ihrer Ubung
um 19:00 in den daf¨
ur
vorgesehenen Ordner.
3