Statistische Software (R-Vertiefung) Kontrollstrukturen: Bedingte Anweisungen. Logische Operatoren & Verknüpfungen. Syntax. Paul Fink, M.Sc.

Ähnliche Dokumente
Kapitel 3. Programmieren in R. Vorlesung Programmieren in statistischer Software: R Sommersemester Bedingte Anweisungen, Schleifen, Funktionen

Erwin Grüner

Erwin Grüner

Grundlagen der Programmierung

Grundlagen der Programmierung

Statistisches Programmieren

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Übungen zur Vorlesung Wissenschaftliches Rechnen I. Grundelemente von Java. Eine Anweisung. wird mit dem Wertzuweisungsoperator = geschrieben.

Programmieren in C/C++ und MATLAB

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

PHP 5.4 ISBN Stephan Heller, Andreas Dittfurth 1. Ausgabe, September Grundlagen zur Erstellung dynamischer Webseiten GPHP54

Erwin Grüner

ModProg 15-16, Vorl. 5

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Programmieren I. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011

Informationsverarbeitung im Bauwesen

R-Tutorial. R bietet zahlreiche Hilfe-Funktionen an. Informiere Dich über die Funktion log():

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Funktionen in PHP 1/7

1 Bedingungen und der Typ bool. Informatik I: Einführung in die Programmierung 5. Bedingungen, bedingte Ausführung und Schleifen. Vergleichsoperatoren

Running R. Windows Aus Menü. Lese R Code ein führt den Code auch gleich aus, eventuell muss vorher das Verzeichnis gewechselt werden.

12 == 12 true 12 == 21 false 4 === 7 true 4 === "vier" false 4 === 4.0 false 12!= 13 true 12!== 12 false 12!== 12.0 true. 1 < 3 true 3 < 1 false

Kontrollstrukturen - Universität Köln

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

1. Erläutern Sie die Aufgaben von Datentypen in der imperativen Programmierung.

Herzlich Willkommen. Über mich Termine Literatur Über PHP

VBA-Programmierung: Zusammenfassung

Lua Grundlagen Einführung in die Lua Programmiersprache

Statistische Software (R) Konstanten. Datentypen in R. Aufruf der Hilfeseiten zu grundlegende Operatoren und Funktionen: Paul Fink, M.Sc.

10:Exkurs MATLAB / Octave

Die Programmiersprache C Eine Einführung

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. Hochschule Darmstadt -Fachbereich Informatik-

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Kontrollstrukturen und Funktionen in C

Probeklausur: Programmierung WS04/05

Steuerung von Programmabläufen. Vorlesung Computergestützte Mathematik zur Linearen Algebra. Lehrstuhl für Angewandte Mathematik Sommersemester 2009

Webbasierte Programmierung

FEMAG-Anwendertreffen 18. November 2009

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

1. LPC - Lehmanns Programmier Contest - Lehmanns Logo

Anwendungssoftware III (MATLAB)

1 Konsole öffnen. 2 matlab & und return eingeben. 3 Konsole dauerhaft geöffnet lassen. 1 Menüpunkt File - Exit MATLAB oder. 2 quit (und return) oder

Lua - Erste Schritte in der Programmierung

Einführung in die C-Programmierung

Entwurf von Algorithmen - Kontrollstrukturen

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Grundlagen der Programmierung in C++ Kontrollstrukturen

Übung zur Vorlesung Multimedia im Netz

2. Programmierung in C

Übersicht Programmablaufsteuerung

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

3 Kurzeinführung in Matlab

Kontrollstrukturen MySQL Funktionen. MySQL 4, 5. Kapitel 20a: PHP Teil 2. Marcel Noe

Programmieren in C. Operatoren, Variablen und deren Sichtbarkeit. Prof. Dr. Nikolaus Wulff

2.5 Programmstrukturen Entscheidung / Alternative

C.3 Funktionen und Prozeduren

Grundlagen der Programmiersprache C++

Linux Prinzipien und Programmierung

Interpreter - Gliederung

Einführung in R. Einführung. Einführung / 3. Einführung / 2

Informatik I. 4. Funktionen: Aufrufe und Definitionen. 25. Oktober Albert-Ludwigs-Universität Freiburg. Informatik I.

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

4 Kontrollfluss-Diagramme

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

2.3 Univariate Datenanalyse in R

Flussdiagramm / Programmablaufplan (PAP)

Dr. Monika Meiler. Inhalt

Installation. Arbeiten mit der MATLAB-Entwicklungsumgebung. MATLAB als Taschenrechner mit Matrix- und Vektorrechnung.

Grundlagen der Programmierung in C Funktionen

IT-Zertifikat: Allgemeine Informationstechnologien II PHP

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

Fallunterscheidung: if-statement

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben.

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

4.Grundsätzliche Programmentwicklungsmethoden

PHP Code Konventionen Um einen einheitlichen Code zu generieren, der von jedem gelesen werden kann, müssen folgende Konventionen eingehalten werden.

Einstieg in die Informatik mit Java

Einführung in die Java- Programmierung

Tag 9: Datenstrukturen

Programmieren für Wirtschaftswissenschaftler SS 2015

Grundlagen der R Programmiersprache. Jonathan Harrington und Tina John IPDS, Kiel.

Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

Matlab Übersicht. Matlab steht für MATrix LABoratory, die Fa. The Mathworks wurde 1984 gegründet

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 4

Anwendung von Geoinformatik: Entwicklung von Open Source Tools für die automatisierte Analyse von Geoinformationen

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Inhalt. 4.7 Funktionen

1 Einführung Erste Schritte Programmierkurs Datentypen Weiterführende Programmierung

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

Algorithmische Kernsprache. Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging.

Prozedurale Datenbank- Anwendungsprogrammierung

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Tutorium Rechnerorganisation

Steueranweisungen. Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/

Selbsteinstufungstest Vorkurs Programmieren

Programmieren in R. Institutsweiterbildung am 17. November 2005 Manuela Hummel und Ralf Strobl

Einfaches Datenmanagement in R

Informationsverarbeitung im Bauwesen

Transkript:

Kontrollstrukturen: Bedingte Anweisungen Statistische Software (R-Vertiefung) if ( Bedingung ) { Ausdruck 1 } else { Ausdruck 2} Paul Fink, M.Sc. Institut für Statistik Ludwig-Maximilians-Universität München Kontrollstrukturen und Funktionen Ausdruck 1 wir ausgewertet, wenn die Bedingung den Wert TRUE liefert Ist die Bedingung FALSE, so wird Ausdruck 2 ausgewertet Die Bedingung in dieser Form darf nicht vektorwertig sein bzw. wird dann nur das erste Element des Vektors ausgewertet Fink: Statistische Software (R) SoSe 2013 1 Kontrollstrukturen: Bedingte Anweisungen Logische Operatoren & Verknüpfungen Die Bedingung kann ein komplexerer logischer Ausdruck sein, der entsprechend auch und und oder Verknüpfungen enthält <- 5 > if ( x==3 ) { x <- x-1 } else { x <- 2*x } 0 Die folgende Tabelle zeigt die Operationen und Funktionen für logische Vergleiche und Verknüpfungen. ==,!= gleich, ungleich >, >= größer, größer gleich <, <= kleiner, kleiner gleich! Negation (nicht) &, && und, oder xor() entweder oder (ausschließend) TRUE, FALSE wahr, falsch Die Operatoren & und arbeiten vektorwertig. Fink: Statistische Software (R) SoSe 2013 2 Fink: Statistische Software (R) SoSe 2013 3

Logische Operatoren & Verknüpfungen e > 8 > 7 > 7 < 5 [1] FALSE <- 5 > (x < 10) && (x > 2) > (x < 10) (x > 5) > (x %% 2 == 1 ) && (x > 5) [1] FALSE Logische Operatoren & Verknüpfungen > logisch1 <- (x > 2) > logisch2 <- (x < 10) > logisch3 <- (2*x > 11) > logisch4 <- (3*x < 20 ) > is.logical(logisch1) > logisch1 > logisch2 > logisch3 [1] FALSE > logisch4 Jetzt noch ein für die vektorwertige Auswertung. > c(logisch1, logisch2) & c(logisch3, logisch4) [1] FALSE TRUE > c(logisch1, logisch2) c(logisch3, logisch4) TRUE Fink: Statistische Software (R) SoSe 2013 4 Fink: Statistische Software (R) SoSe 2013 5 Logische Operatoren & Verknüpfungen Bedingte Anweisungen II Die bedingte Anweisung Damit kann die Bedingung einer bedingten Anweisung ein komplexer logischer Ausdruck sein. <- seq(from = -5, to = 5, by = 1 ) [1] -5-4 -3-2 -1 0 1 2 3 4 5 > if ( (max(x) < 10) && (min(x) > -10) ) { x <- x+1 } else { x <- x-1 } [1] -4-3 -2-1 0 1 2 3 4 5 6 ifelse( test, yes, no) (siehe auch? ifelse ) dient der vektorwertigen Auswertung von Bedingungen. Dabei werden für die Komponenten, die TRUE liefern, die entsprechenden Komponenten von yes zurückgegeben. Für die Komponenten, die FALSE liefern, wird die entsprechende Komponente in no zurückgegeben. <- 1:10 2 3 4 5 6 7 8 9 10 > ifelse( x < 6, x^2, x+1 ) 4 9 16 25 7 8 9 10 11 Fink: Statistische Software (R) SoSe 2013 6 Fink: Statistische Software (R) SoSe 2013 7

Schleifen In R stehen die üblichen Kontrollbefehle für Schleifen zur Verfügung. Die for Schleife for ( i in Menge ){ Ausdruck } > for( i in 1:5 ) { print( i^2 ) } [1] 4 [1] 9 6 [1] 25 Schleifen > for( i in c(2, 4, 6, 7) ) { print( i^2 ) } [1] 4 6 [1] 36 [1] 49 Häufig wird folgendes Konstrukt benutzt. <- 1:4 > for( i in 1:length(x) ) { print( x[i]^3 ) } [1] 8 [1] 27 [1] 64 Daran ist zunächst nichts auszusetzen. Was passiert allerdings, wenn die Länge des Objekts 0 ist? <- NULL > length(x) [1] 0 > for ( i in 1:length(x) ) { print( x[i]^3 ) } numeric(0) numeric(0) Fink: Statistische Software (R) SoSe 2013 8 Fink: Statistische Software (R) SoSe 2013 9 Schleifen D.h. die Schleife wird zweimal durchlaufen, da der Ausdruck 1:length(x) den Vektor (1, 0) zurückliefert: > 1:length(x) 0 Deshalb ist es besser, den bereits eingeführten Befehl seq(along=x) zu verwenden, der einen Indexvektor erzeugt, der gleiche Länge wie x hat. <- 1:4 > for ( i in seq(along=x) ){ print( x[i]^3 ) } [1] 8 [1] 27 [1] 64 <- NULL > for ( i in seq(along=x) ){ print( x[i]^3 ) } D.h. im zweiten Fall wird erwartungsgemäß nichts zurückgeliefert. Schleifen Die while Schleife while( Bedingung ){ Ausdruck } > i <- 1 > while (i < 5) { + print(i^2) + i <- i+2 + } [1] 9 Die repeat Schleife repeat { Ausdruck } Fink: Statistische Software (R) SoSe 2013 10 Fink: Statistische Software (R) SoSe 2013 11

Schleifen Die repeat Schleife testet also keine Bedingung, die die Fortsetzung oder den Abbruch der Schleife steuert. Dafür ist der Progarmmierer zuständig, indem er an geeigneter Stelle einen break Befehl einbaut. > i <- 1 > repeat{ + print( i^2 ) + i <- i+2 + if ( i > 10 ) break + } [1] 9 [1] 25 [1] 49 [1] 81 Zusätzlich steht noch der Befehl next zur Verfügung, um zum Beginn der Schleife zurückzuspringen. Schleifen > i <- 1 > repeat{ + i <- i+1 + if (i < 10) next + print(i^2) + if (i >= 13) break + } 00 21 44 69 Fink: Statistische Software (R) SoSe 2013 12 Fink: Statistische Software (R) SoSe 2013 13 Vermeiden von Schleifen, Vektorisierung Vermeiden von Schleifen, Vektorisierung Bei R handelt es sich um eine sog. Interpreter-Sprache, d.h. jeder Befehl wird erst zur Laufzeit interpretiert und ausgeführt (im Gegensatz zu kompilierten Sprachen) Insbsondere Schleifen mit vielen Durchläufen, insbesondere auch ineinander geschachtelte Schleifen können sehr langsam sein, z.b. für den sequentiellen Zugriff auf alle Elemente X[i,j] einer Matrix Für die schnelle Berechnung von Zeilen und Spaltensummen, sowie von Zeilen und Spaltenmittelwerten, stehen die Funktionen rowsums(),colsums(), rowmeans() und colmeans() zur Verfügung Verwende, wenn möglich, alternativ spezielle Befehle, die eine Operation auf alle Elemente eines Objekts (Liste, Vektor, Matrix) anwenden Es stehen die Befehle apply(), lapply(), sapply(), mapply() und tapply() zur Verfügung Fink: Statistische Software (R) SoSe 2013 14 Fink: Statistische Software (R) SoSe 2013 15

lapply und sapply lapply und sapply Diese Funktionen sind für Listen (lapply()) und Vektoren gedacht. Dabei liefert lapply als Ergebnis eine Liste zurück, auch wenn der Eingabe Vektor als Elemente nur Skalare enthält. sapply() dagegen versucht, die Ergebnisse in diesem Fall als Array, Vektor, etc. auszugeben. lapply(x, FUN,...) sapply(x, FUN,..., simplify = TRUE, USE.NAMES = TRUE) e <- 1:4 > lapply(x = x, FUN = function(x) x^2 ) [[1]] [[2]] [1] 4 [[3]] [1] 9 [[4]] 6 > sapply(x = x, FUN = function(x) x^2 ) 4 9 16 > X <- matrix(nrow = 2, ncol = 2, data = 7:10 ) > sapply(x = X, FUN = function(x){ x/2 } ) [1] 3.5 4.0 4.5 5.0 Fink: Statistische Software (R) SoSe 2013 16 Fink: Statistische Software (R) SoSe 2013 17 lapply und sapply > X2 <- matrix(nrow=2, ncol=2, data=1:4) > l1 <- list(x, X2) > lapply(l1, FUN = function(x){ x%*%x } ) [[1]] [1,] 121 153 [2,] 136 172 [[2]] [1,] 7 15 [2,] 10 22 lapply und sapply > X2 <- matrix(nrow = 2, ncol = 2, data = 1:4) > l1 <- list(x, X2) > lapply(x = l1, FUN = function(x){ x%*%x } ) [[1]] [1,] 121 153 [2,] 136 172 [[2]] [1,] 7 15 [2,] 10 22 > sapply(x = l1, FUN = function(x){ x%*%x } ) [1,] 121 7 [2,] 136 10 [3,] 153 15 [4,] 172 22 Der letzte sapply() Befehl zeigt ein nachvollziehbares, aber sicher nicht das gewünschte Ergebnis. Im Fall, dass die Eingabeliste komplexe Objekte (hier: Matrizen) enthält, ist also der lapply() Fink: Statistische Software (R) SoSe 2013 18 Fink: Statistische Software (R) SoSe 2013 19

lapply und sapply apply für Matrizen apply(x, MARGIN, FUN,...) Befehl zu empfehlen. Neben sapply() existiert noch der verwandte Befehl replicate(), siehe?replicate. Die Argumente sind die Eingabematrix X die beizubehaltende Dimensionsnummer (1 für Zeilen, 2 für Spalten) die auf jede Zeile bzw. jede Spalte anzuwendende Funktion. Dabei kann es sich wiederum um bereits in R definierte Fink: Statistische Software (R) SoSe 2013 20 Fink: Statistische Software (R) SoSe 2013 21 apply für Matrizen apply für Matrizen Funktionen oder eine selbst definierte Funktion handeln. Definiert man die Funktion erst beim Aufruf von apply() als FUN Argument, so spricht man von einer anonymen Funktion, da diese nach Ausführen des Befehls nicht mehr bekannt ist e > X <- matrix( nrow = 3, ncol = 2, byrow = TRUE, data = 4:9 ) > X [1,] 4 5 [2,] 6 7 [3,] 8 9 > apply(x = X, MARGIN = 1, FUN = max) [1] 5 7 9 > apply(x = X, MARGIN = 2, FUN = min) [1] 4 5 > # liefert den Index des jeweils maximalen Elements einer Zeile zurueck > apply(x = X, MARGIN = 1, FUN = which.max) [1] 2 2 2 > # eigene Funktion > apply(x = X, MARGIN = 2, FUN = function(x){ max(x)-min(x) } ) [1] 4 4 Fink: Statistische Software (R) SoSe 2013 22 Fink: Statistische Software (R) SoSe 2013 23

tapply für Datensätze Die Idee von tapply() ist die Anwendung auf Datensätze zur Berechnung zusammenfassender Statistiken einer Variable bezüglich der Gruppierung nach einer anderen Variable. Im folgenden ist x ein nmerischer Vektor und fac ein Faktor. Es soll die Summe in x, gruppiert nach fac berechnet werden. <- 1:10 > fac <- factor(x = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2) ) > tapply(x = x, INDEX = fac, FUN = sum ) 1 2 15 40 tapply() liefert 2 Werte zurück, und zwar 15 für den Faktorwert 1 und 40 für den Faktorwert 2. D.h. es wurde die Summe der Zahlen von 1 bis 5 berechnet (15, Faktorstufe 1) und die Summe der Zahlen von 6 bis 10 (40, Faktorstufe 2). mapply Der Befehl mapply() ist eine Art multivariate Version von sapply(). Folgendes ist der Hilfeseite?mapply entnommen. > mapply(rep, times=1:4, x=4:1) [[1]] [1] 4 [[2]] [1] 3 3 [[3]] [1] 2 2 2 [[4]] 1 1 1 Fink: Statistische Software (R) SoSe 2013 24 Fink: Statistische Software (R) SoSe 2013 25 Funktionen Obwohl S-Plus und R bereits in der Standardinstallation extrem mächtige Werkzeuge zur Datenanalyse darstellen, wollen die meisten Benutzer nach einiger Zeit dieses Werkzeug ihren eigenen Bedürfnissen anpassen. Einer der größten Vorteile von S ist, daß jeder Benutzer das System leicht um eigene Funktionen erweitern oder bestehende Funktionen modifizieren kann. Der größte Teil von R selber ist in der Sprache S geschrieben. S ist eine vollwertige Programmiersprache in deren Design die Notwendigkeiten der statistischen Datenanalyse mit einbezogen wurden, es ist nicht nur eine Sprache zur Datenanalyse. Formale Definition function ( ARGLIST ) BODY Das Schlüsselwort function markiert den Beginn einer Funktionsdefinition. Die Argumente der Funktion werden durch eine mit Kommas getrennte Liste von Ausdrücken der Form SYMBOL = AUSDRUCK oder durch das spezielle formale Argument... angegeben. Jeder gültige R Ausdruck kann als BODY der Funktion verwendet werden, zumeist ist es ein durch geschwungene Klammern gruppierter Block von Anweisungen. In den meisten Fällen werden Funktionen Symbolen zugewiesen ( bekommen einen Namen ), aber auch anonyme Funktionen sind an gewissen Stellen sehr praktisch (apply(),... ). Fink: Statistische Software (R) SoSe 2013 26 Fink: Statistische Software (R) SoSe 2013 27

Funktionen aufrufen Das... Argument moment <- function(x, n=2) { sum(x^n)/length(x) } Funktionen retournieren nur eine einziges Objekt: den Wert des letzten Ausdruckes oder das Argument von return(). In der Praxis ist dies nicht allzu restriktiv, da das zurückgelieferte Objekt eine beliebig komplexe Liste sein kann. Benannte Argumente: Wenn eine Funktion aufgerufen wird, müssen die Argumente nicht in derselben Reihenfolge wie in der Funktionsdefinition angegeben werden, sondern können auch direkt mit Namen angesprochen werden, z.b. moment(n=3, x=myx). Argumente mit Defaultwerten müssen beim Aufruf nicht spezifiziert werden, z.b. moment(myx). Defaultwerte können Funktionen anderer Argumente sein. Funktionen können beliebig viele unspezifizierte Argumente besitzen, falls die Argumentliste das spezielle Argument... enthält, z.b. max(..., na.rm = FALSE). Eine zweite Verwendungsmöglichkeit ist das Weiterleiten von Argumenten an eine andere Funktion: myplotfun <- function(x, y, myarg,...) { ## optionale Berechnungen mit x, y und myarg ## Aufruf Standard Plot Funktion plot(x, y,...) } Damit versteht myplot() zusätzlich zu seinen eigenen Argumenten implizit auch alle Argumente von plot() ohne weiteren Programmieraufwand. x <- list(...) im Körper einer Funktion konvertiert alle unspezifizierten Argumente in eine benannte Liste. Fink: Statistische Software (R) SoSe 2013 28 Fink: Statistische Software (R) SoSe 2013 29 Das... Argument Argumente zusammenfügen Das... Argument kann zwar an beliebig viele Funktionen weitergeben werden, jedoch bekommen diese dann alle dieselbe Argumentliste. Um mehreren Funktionen verschiedene Argumentlisten zu übergeben, empfiehlt es sich, diese als benannte Listen zu spezifizieren und die Funktionen mittels do.call() aufzurufen: myfun <- function(x, fun2.args=null, fun3.args=null,...) { ## Berechnungen (eventuell mit fun2.args etc.) fun1(x,...) do.call(fun2, fun2.args) do.call("fun3", fun3.args) ## weitere Berechnungen } R> myfun(x, fun2.args=list(arg1=wert)) # erstes Arg entweder Funktion # oder Zeichenkette Wenn eine Funktion aufgerufen wird, werden die tatsächlichen Argumente des Funktionsaufrufen mit den formalen Argumenten der Funktionsdefinition in der folgenden Reihenfolge zusammengefügt: 1. alle benannten Argumente deren Namen dem eines formalen Argumentes exakt entspricht 2. wenn kein... Argument definiert wurde genügt eine eindeutige Übereinstimmung am Beginn des Namens 3. Position in der Argumentliste 4. Verbleibende tatsächliche Argumente werden Teil von... (falls definiert). Anmerkung: Nicht alle formalen Argumente müssen auch durch tatsächliche Argumente abgedeckt werden. Fink: Statistische Software (R) SoSe 2013 30 Fink: Statistische Software (R) SoSe 2013 31

Zuweisungsoperatoren: <- und = Außerhalb von Funktionsaufrufen haben die beiden dieselbe Bedeutung: <- 42; x [1] 42 = 42; x [1] 42 Innerhalb eines Funtionsaufrufes verhält sich <- wie immer (Zuweisung von Wert an Symbol), während = den Wert einem benannten Argument zuweist: > sin(x = 3) [1] 0.14112 [1] 42 > sin(x <- 3) [1] 0.14112 [1] 3 Lazy Evaluation Beim Aufruf einer Funktion werden die Argumente nur geparsed, aber nicht evaluiert. Die Auswertung des Argumentes erfolgt erst, wenn das Argument zum ersten Mal verwendet wird: > myfun <- function(x, y){ + if(x < 0) + return(nan) + else + return( y * log(x)) + } > myfun(-1) [1] NaN > myfun(2,3) [1] 2.079442 > myfun(2) Error in myfun(2) : Argument "y" is missing, with no default Fink: Statistische Software (R) SoSe 2013 32 Fink: Statistische Software (R) SoSe 2013 33 Funktionen sind Objekte Funktionen sind Objekte Funktionen sind in S sogenannte Objekte erster Klasse und können wie Daten behandelt werden, insbesonders können Funktionen direkt als Argumente anderer Funktionen verwendet werden, Funktionen als Rückgabewert liefern, in R selber in ihre Bestandteile zerlegt werden. > apply(trees, 2, FUN = median) Girth Height Volume 12.9 76.0 24.2 > f <- approxfun(x = 1:10, y = sin(1:10)) > f(3) [1] 0.14112 > g <- function(x) x+3 > g(5) [1] 8 > body(g) x + 3 > body(g)[[3]] [1] 3 > body(g)[[3]] <- 10 > g(5) 5 Fink: Statistische Software (R) SoSe 2013 34 Fink: Statistische Software (R) SoSe 2013 35