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
© Copyright 2024 ExpyDoc