Funktionen

Custom Funktionen

Funktionen sind sehr oft gebrauchte Entitäten in , mithilfe derer man sich hauptsächlich sparen kann sich wiederholenden Code zu schreiben. Als praktische:r Anwender:in schreibt in der Regel Funktionen eher selten selbst, nutzt aber sehr häufig Funktionen anderer. Um damit besser klar zu kommen, lohnt es sich anfangs einige wenige Funktionen selbst zu schreiben.

Die klassische Struktur einer Funktion in sieht wie folgt aus:

1durchschnittsbilder <-
2  function(a,b,c) {
3   return((a + b + c)/3)
}                                 
1
Zuweisung des Objektnamens
2
Befehl für »Erstellung einer Funktion« (function()) und Festlegung deren Argumente
3
Festlegung des Outputs der Funktion

Übung 1

Erstellen Sie eine Funktion durchschnittsbilder() die das arithmetische Mittel von vier numerischen atomic vectors (»Zahlen«) berechnet.

NoteHinweis:

Das schaffst du auch ohne Hinweis 💪🏽!

TipLösung:
durchschnittsbilder <-      
  function(hund,katze,maus,zahlvier) {         
   return((hund + katze + maus + zahlvier)/4)    
} 


Während die durchschnittsbilder-Funktion keinen Output ergibt, wenn man nicht alle Argumente spezifiziert, haben die meisten Funktionen, die wir später nutzen werden defaults für viele Argumente.

Übung 2

Die folgende Funktion hat den default summe für das Argument methode. Denken Sie über den Code nach und diskutieren Sie welchen Output die Inputs in den Zeilen 9-11 zeigen werden.

Vektorisierte Funktionen

Viele vordefinierte Funktionen sind vektorisiert. Das bedeutet, dass sie ihre Funktion mehrfach ausführen, wenn sie keine atomare Struktur sondern einen Vektor übergeben bekommen. Diese Vektorisierung kann elementweise erfolgen,

c(5, 2, 8) > 3
[1]  TRUE FALSE  TRUE
c(5, 2, 8) > c(4, 3, 9)
[1]  TRUE FALSE FALSE

oder über alle paarweisen Kombinationen hinweg:

outer(c(5, 2, 8), c(4, 3, 9), `>`)
      [,1]  [,2]  [,3]
[1,]  TRUE  TRUE FALSE
[2,] FALSE FALSE FALSE
[3,]  TRUE  TRUE FALSE

Modularität via Bibliotheken

gilt als eine der »schnellsten« Statistiksoftwarelösungen - und zwar im doppelten Sinne: Zum einen dauern auch komplexe Modellierungen nur kurze Zeit, zum anderen werden neu entwickelte statistische Verfahren sehr schnell implementiert. Dies geschieht anhand von »Softwareteilstücken« den sogenannten Bibliotheken (»packages«). Entwickelt ein:e Forscher:in ein neues statistisches Verfahren oder programmiert ein fortgeschrittener User benutzerfreudlichere Operatoren/Funktionen, können diese anhand der Bibliotheken bereitgestellt werden.

Bibliotheken installieren

Zentrale Repositorien halten derzeit über 15.000 Bibliotheken bereit, weshalb es nicht empfehlenswert ist alle zu installieren. Nutz man lokal auf einem Rechner und nicht wie hier im Browser installiert man einzelne Bibliotheken mit der Syntax install.packages("packagename"). Dieser Befehl sorgt dafür, dass die Bibliothek von einem Repositorium via Internet auf den Rechner geladen wird.

Bibliotheken laden

Die Operatoren/Funktionen der Bibliothek stehen allerdings erst für eine Anwendung zur Verfügung, wenn eine Bibliothek »geladen« wird. Dies erfolgt (lokal und hier im Browser) mithilfe der Syntax library(packagename).

Funktionen aus ungeladenen Bibliotheken nutzen

Möchte man nur eine bestimmte Funktion aus einem bestimmten Paket nutzen, verwendet man die Syntax paketname::funktionsname().