Programmieren mit statistischer Software

Ähnliche Dokumente
Programmieren mit statistischer Software

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

Eine Einführung in R: Programmstrukturen

Programmieren mit statistischer Software

Programmieren mit statistischer Software

Eine Einführung in R: Programmstrukturen

Unterprogramme. Komplexes Verhalten kann modular mit Hilfe von Unterprogrammen beschrieben werden Es gibt zwei Arten von Unterprogrammen:

Funktionen in Matlab. Lehrstuhl für Angewandte Mathematik Sommersemester und 29. Mai 2008

Programmieren lernen mit Visual Basic

Erwin Grüner

5. Übung - Kanalkodierung/Programmierung

Programmierkurs Python I

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Funktionen in Python

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Einstieg in die Informatik mit Java

R-Wörterbuch Ein Anfang... ein Klick auf einen Begriff führt, sofern vorhanden, zu dessen Erklärung.

6. Funktionen, Parameterübergabe

Programmieren mit statistischer Software

1 def Anweisung. 2 Argumentübergabe. 3 Lokale Variablen. 4 Default Argumente. 5 Aufruf mit Schlüsselwort. 6 Variable Argumente. Funktionen in Python

Programmieren I. Kapitel 5. Kontrollfluss

Vorsemesterkurs Informatik Sommersemester Aufgabenblatt Nr. 5A. Lösung zu Aufgabe 1 (Fehler in Haskell-Quelltext: Parsefehler)

Programmieren mit statistischer Software

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

JAVA - Methoden

PROGRAMMIERKURS FORTRAN

> patienten<-data.frame( c(28,61,79,54,na,48), c(2,2,3,2,1,1), c("pillen","pillen","massage","gymnastik","massage","gymnastik"),

JAVA - Methoden - Rekursion

R-Fehlermeldungsleitfaden

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme)

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

Eine kleine Anleitung zum Programmieren mit MATLAB

Objektorientiertes Programmieren (Java)

Funktionen in JavaScript

Klassen und Objekte. Klassen sind Vorlagen für Objekte. Objekte haben. Attribute. Konstruktoren. Methoden. Merkblatt

Funktionen in Python

Funktionen. Überblick über Stored Functions. Syntax zum Schreiben einer Funktion. Schreiben einer Funktion

2 Eine einfache Programmiersprache

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

Programmieren mit statistischer Software

Funktionen nur wenn dann

Funktionen in JavaScript

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Einführung in die Programmierung WS 2009/10. Übungsblatt 5: Typen, Variablen und einfache Methoden in Java

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

Einführung in die Informatik 1

R Einstieg. Manuel Eugster, Armin Monecke, Faban Scheipl. Institut für Statistik Ludwig-Maximilians-Universität München.

Umsetzung einer Klassenkarte in einer Programmiersprache

2 Eine einfache Programmiersprache

Dipl.-Volksw. Markus Pullen Wintersemester 2012/13

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

Listing 1: Cowboy. Listing 2: Woody

Fachhochschule Südwestfalen Wir geben Impulse. Kontrollstrukturen und Schleifen in Octave

Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO

PHP JavaScript Kapitel 4. Kommentare

Einführung in das Programmieren Probeklausur Lösungen

Prozeduren vs. Funktionen

Funktionen nur wenn dann

Crashkurs Python und Sage U23 Krypto-Mission

JAVA-Datentypen und deren Wertebereich

Modellierung und Programmierung 1

Ganze Zahlen. Die Typen int, unsigned int; Auswertung arithmetischer Ausdrücke, arithmetische Operatoren

OCP Java SE 8. Lambda

Konzepte der Programmiersprachen

System.out.println("TEXT");

WiMa-Praktikum 1. Woche 8

Globale Variablen Diverses. Globale Variablen. Globale Variablen

Array-Zuweisungen. Array-Zuweisungen können über die Position, den Namen oder gemischt erfolgen.

Interpreter - Gliederung

Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, Uhr Bearbeitungszeit: 105 Minuten

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

// Objekt-Methoden: public void insert(int x) { next = new List(x,next); } public void delete() { if (next!= null) next = next.next; } public String

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Methoden und Funktionen in Scala

Vorlesung Skriptsprachen Duale Hochschule Stuttgart Sommersemester Dipl.-Ing. (FH) Volker Schepper

Programmierung und Angewandte Mathematik

Welche Informatik-Kenntnisse bringen Sie mit?

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Einführung in die Programmierung mit VBA

Vorsichtige Programmierer verwenden Inkrement- Operatoren nicht in komplizierteren Ausdrücken

Formale Spezifikation mit Java Modeling Language

C.3 Funktionen und Prozeduren

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Übungsblatt 2. Java Vorkurs (WS 2017)

Visuelle Kryptographie. Anwendung von Zufallszahlen

Grundlagen der Programmierung in C Funktionen

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

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

Einführung in die Informatik 1

Softwareentwicklung I (IB) Objekte. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

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

Übung zur Vorlesung Multimedia im Netz

L A TEX-Tipps & knitr

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen

Informatik B von Adrian Neumann

m-files sind Folgen von MATLAB-Anweisungen oder Daten-Files.

Transkript:

Programmieren mit statistischer Software Eva Endres, M.Sc. Institut für Statistik Ludwig-Maximilians-Universität München Funktionen

Definition von Funktionen I Eine Funktion hat einen Namen benötigt Argumente (Input): arg_1, arg_2,... formale Argumente führt (mit den Argumenten) Berechnungen durch und gibt ein Ergebnis zurück (Rückgabewert) > # name <- function(arg_1, arg_2,...) { > # statements > # } Funktionsaufruf > # name(expr_1, expr_2) Endres: Programmieren mit statistischer Software Sommersemester 2017 2

Definition von Funktionen II Beispiel: Funktion, die den Index der Beobachtung zurückgibt, die am stärksten vom Median abweicht Name der Funktion: which_maxdev Input: x Rückgabewert: standardmäßig die letzte Zeile der Funktion, ansonsten benötigt man return() > #?which.max > > which_maxdev <- function(x) { + mdn <- median(x) + devs <- abs(x - mdn) + which.max(devs) Endres: Programmieren mit statistischer Software Sommersemester 2017 3

Definition von Funktionen III Funktionsaufrufe > data("forbes2000", package = "HSAUR2") > > # summary(forbes2000$sales) > which_maxdev(forbes2000$sales) > # Forbes2000$sales[which_maxdev(Forbes2000$sales)] > > # summary(forbes2000$marketvalue) > which_maxdev(forbes2000$marketvalue) [1] 2 > # Forbes2000$marketvalue[which_maxdev(Forbes2000$marketvalue)] Endres: Programmieren mit statistischer Software Sommersemester 2017 4

Definition von Funktionen IV Ausgabe der letzten Zeile > which_maxdev <- function(x) { + mdn <- median(x) + devs <- abs(x - mdn) + which.max(devs) + print("hallo") > > which_maxdev(forbes2000$sales) [1] "Hallo" Ausgabe dessen, was mit return() explizit zurückgegeben wird (der Rest der Funktion wird nicht mehr ausgeführt) Endres: Programmieren mit statistischer Software Sommersemester 2017 5

Definition von Funktionen V > which_maxdev <- function(x) { + mdn <- median(x) + devs <- abs(x - mdn) + return(which.max(devs)) + print("hallo") > > which_maxdev(forbes2000$sales) Endres: Programmieren mit statistischer Software Sommersemester 2017 6

Das... Argument I > which_maxdev <- function(x) { + mdn <- median(x) + devs <- abs(x - mdn) + which.max(devs) > > which_maxdev(forbes2000$profits) integer(0) Alle Funktionen innerhalb der selbst geschriebenen Funktion werden, soweit nicht anders angegeben, mit ihren Default-Argumenten verwendet > median(forbes2000$profits) [1] NA > args(median) function (x, na.rm = FALSE,...) NULL Endres: Programmieren mit statistischer Software Sommersemester 2017 7

Das... Argument II Argument na.rm (Erweiterung der Funktion which_maxdev mit dem... Argument) > which_maxdev <- function(x,...) { + mdn <- median(x,...) + devs <- abs(x - mdn) + which.max(devs) > > which_maxdev(forbes2000$profits, na.rm = TRUE) [1] 364 Endres: Programmieren mit statistischer Software Sommersemester 2017 8

Benannte Argumente und Standardeinstellungen I na.rm=true als Default (Standardeinstellung) > which_maxdev <- function(x, na.rm = TRUE) { + mdn <- median(x, na.rm = na.rm) + devs <- abs(x - mdn) + which.max(devs) > > which_maxdev(forbes2000$profits) [1] 364 Äquivalente Aufrufe der Funktion which_maxdev Bei Verwendung der Namen der Argumente kann die Reihenfolge beliebig variiert werden. Ohne Verwendung der Namen der Argumente muss die Reihenfolge aus der Definition der Funktion eingehalten werden. Endres: Programmieren mit statistischer Software Sommersemester 2017 9

Benannte Argumente und Standardeinstellungen II Ohne Namen der Argumente > which_maxdev(forbes2000$sales) > which_maxdev(forbes2000$sales, FALSE) > # which_maxdev(false, Forbes2000$sales) # funktioniert nicht Mit Namen der Argumente > which_maxdev(x = Forbes2000$sales, na.rm = FALSE) > which_maxdev(na.rm = FALSE, x = Forbes2000$sales) > which_maxdev(na.rm = FALSE, Forbes2000$sales) > # teilweise Benennung funktioniert auch Endres: Programmieren mit statistischer Software Sommersemester 2017 10

Argumentenmatching I 3-stufiger Prozess 1. Exaktes Matching basierend auf den exakten Namen der Argumente > which_maxdev(forbes2000$sales, na.rm = FALSE) > # Jeder Argument-Name darf nur einmal verwendet werden > # which_maxdev(na.rm=forbes2000$sales, na.rm = FALSE) > # funktioniert nicht 2. Partielles Matching basierend auf den (Anfangsbuchstaben der) Namen der Argumente > # hier: n statt na.rm > which_maxdev(forbes2000$sales, n = FALSE) > # which_maxdev(forbes2000$sales, n = FALSE, na = FALSE) > # funktioniert nicht Endres: Programmieren mit statistischer Software Sommersemester 2017 11

Argumentenmatching II 3. Matching basierend auf der Position der Argumente > which_maxdev(n = FALSE, Forbes2000$sales) > # Unmatched Arguments -> error > which_maxdev(forbes2000$sales, foo = 1) Error in which_maxdev(forbes2000$sales, foo = 1): unbenutztes Argument (foo = 1) Endres: Programmieren mit statistischer Software Sommersemester 2017 12

Argumentenprüfung I Falsche Eingabe-Argumente müssen aufgefangen werden. Es sollte eine hilfreiche Fehlermeldung zurückgegeben werden. Fehlerhafte Verwendung der Funktion which_maxdev > which_maxdev(forbes2000$name) > # Error in x - mdn : non-numeric argument to binary operator > # In addition: Warning message: > # In mean.default(sort(x, partial = half + 0L:1L)[half + 0L:1L]) : > # argument is not numeric or logical: returning NA > which_maxdev(as.matrix(forbes2000[, c("sales", "marketvalue")])) > # [1] 2002 > which_maxdev(forbes2000$sales, na.rm = "yes") > # Error in if (na.rm) x <- x[!is.na(x)] else > # if (any(is.na(x))) return(x[false][na]) : > # argument is not interpretable as logical Endres: Programmieren mit statistischer Software Sommersemester 2017 13

Argumentenprüfung II Überprüfung der Eingabe mit stopifnot() > which_maxdev <- function(x, na.rm = TRUE) { + stopifnot(is.numeric(x)) + stopifnot(is.vector(x)) + stopifnot(is.logical(na.rm)) + mdn <- median(x, na.rm = na.rm) + devs <- abs(x - mdn) + which.max(devs) > > which_maxdev(forbes2000$name) Error: is.numeric(x) is not TRUE > which_maxdev(as.matrix(forbes2000[, c("sales", "marketvalue")])) Error: is.vector(x) is not TRUE > which_maxdev(forbes2000$sales, na.rm = "yes") Error: is.logical(na.rm) is not TRUE Endres: Programmieren mit statistischer Software Sommersemester 2017 14

Argumentenprüfung III Ausblick: Anwendung einer Funktion, die für einen Vektor definiert ist, auf eine Matrix > # mit apply() > apply(as.matrix(forbes2000[, c("sales", "marketvalue")]), 2, + which_maxdev) sales marketvalue 10 2 Endres: Programmieren mit statistischer Software Sommersemester 2017 15

Rückgabewert I Jegliches R-Objekt kann von einer Funktion zurückgegeben werden. Default: Wert des letzten Ausdrucks (der letzten Zeile) oder mit return() die Funktion wird dann verlassen > which_maxdev <- function(x, na.rm = TRUE) { + stopifnot(is.numeric(x) & is.vector(x)) + stopifnot(is.logical(na.rm)) + mdn <- median(x, na.rm = na.rm) + devs <- abs(x - mdn) + return(which.max(devs)) kann direkt ausgegeben oder zugewiesen werden > which_maxdev(forbes2000$sales) > res <- which_maxdev(forbes2000$sales) > res Endres: Programmieren mit statistischer Software Sommersemester 2017 16

Rückgabewert II mit invisible() Objekt nur nach Zuweisung sichtbar > which_maxdev <- function(x, na.rm = TRUE) { + stopifnot(is.numeric(x) & is.vector(x)) + stopifnot(is.logical(na.rm)) + mdn <- median(x, na.rm = na.rm) + devs <- abs(x - mdn) + invisible(which.max(devs)) Ergebnis wird nicht ausgegeben, kann aber zugewiesen werden > which_maxdev(forbes2000$sales) > res <- which_maxdev(forbes2000$sales) > res Endres: Programmieren mit statistischer Software Sommersemester 2017 17

Funktionsbereich I Regeln, um den Wert eines Symbols zu finden 3 Klassen von Symbolen: 1. Formale Parameter - Argumente der Funktion - hier x 2. Lokale Variablen - werden innerhalb der Funktion definiert - hier y 3. Freie Variablen - der Rest - hier z hierzu wird das Environment der Funktion durchsucht, dann der Umgebung, usw., bis zum Globalen Environment 1. und 2. werden auch gebundene Variablen genannt. Sie existieren nur innerhalb des Environments der Funktion und nicht außerhalb. > f <- function(x) { + y <- 2 * x + cat("x =", x, "\n") + cat("y =", y, "\n") + cat("z =", z, "\n") Endres: Programmieren mit statistischer Software Sommersemester 2017 18

Funktionsbereich II > # Fehlermeldung, da z nicht definiert ist > f(2) x = 2 y = 4 Error in cat("z =", z, "\n"): Objekt z nicht gefunden > # Definiton von z > z <- 42 > f(2) x = 2 y = 4 z = 42 > # Warnung: Die Verwendung freier Variablen in einer Funktion > # ist sehr fehleranfaellig > # und sollte deshalb vermieden werden. Endres: Programmieren mit statistischer Software Sommersemester 2017 19