R (statistische Programmiersprache)

Aus Verein Alpine Geckos
(Weitergeleitet von R)
Wechseln zu: Navigation, Suche
R (statistische Programmiersprache)
Dokumentation: cran.r-project.org
Lizenz: GNU GPL, Version 2.0
r-project.org


R ist eine freie Programmiersprache für statistisches Rechnen und statistische Grafiken. Sie ist in Anlehnung an die Programmiersprache S entstanden und weitgehend mit dieser kompatibel. Außerdem orientierten sich die Entwickler an der Programmiersprache Scheme.

R ist Teil des GNU-Projekts und auf vielen Plattformen verfügbar. Vor allem im akademischen Bereich gilt sie heute als statistische Standardsoftware. [1]

Für R gibt es eine Vielzahl an Grafischen Oberflächen wie z. Bsp. RStudio und RKWard.

Inhaltsverzeichnis

Entwicklungsumgebung

Extensions

Climatol Package

http://cran.r-project.org/web/packages/climatol/index.html

knitR

knitr Using Markdown R Markdown

Sna package

Igraph

igraph is a free software package for creating and manipulating undirected and directed graphs. It includes implementations for classic graph theory problems like minimum spanning trees and network flow, and also implements algorithms for some recent network analysis methods, like community structure search. [2]

Others

Dokumentation

Daten werden in den RAM geladen!

Coding Style [1] [2] [3]

  • Einrückungen werden mit 2 Leerzeichen gemacht.
  • Funktionen beginnen immer mit Großbuchstaben
  • Variablen- und Funktionsnamen mit Camelcase ohne Trennzeichen (, - .)
  • Variablen- und Funktionsnamen sollen die eigene Funktion oder den Inhalt beschreiben


Syntax

  • matrix01 +4 - addiert zu allen Opjekten der Matrix 4 hinzu und zeigt dies an, ändert aber an der Matrix selber nichts an den Zahlenwerten
  • Zugriff auf Spalte => matrix[, "Spalte"] oder matrix$Spalte
  • matrix[,-3] => alle Spalten ohne dritte
  • "." (Punkte) für Dezimahltrennzeichen und "," (Komma) für Variablentrennung!
  • Kommentare können durch "#" hinzugefügt werden
  • TRUE und FALSE können auch mit T und F abgekürzt werden
  • wenn ein Objekt mit 'name <- funktion(value)' erzeugt wird, kann man gleichzeitig eine Ausgabe bewirken, wenn man das Ganze nochmal klammert: (funktion(value))
  • Kommentare kann man durch # hinzufügen. Alles was dahinter steht wird von # ignoriert.

Operatoren

  • <- => Zuweisung

Zugriff auf Elemente (Subsetting)

  • [] gibt immer ein Objekt zurück der selben Klasse wie das Original
  • [[]] gibt immer ein Element einer Liste oder eines data.frames retour
  • $ gibt Elemente einer Liste oder eines data.frames durch den Namen retour

Mathematik

  •  ! Negation
  • & Und
  • | Oder
  • == Gleich
  •  != Ungleich
  • < kleiner
  • > größer
  • <= Kleiner gleich
  • >= Größer gleich

Objekt-Typen

Objekte bestehen zumindest aus dem Inhaltn - den Daten - und den Attributen length (Länge des Objektes) und mode (Datentyp).

https://de.wikibooks.org/wiki/GNU_R:_Daten_in_R

Namen sind Case-Sensitiv.

Einfache Datentypen:

  • complex
  • character
  • logical
  • numeric
  • raw: binärdaten

weitere Datentypen:

  • functions
  • call
  • expression

komplexe Datentypen:

  • vector: für Listen von Objekten gleichen Typs; mathematische operationen werden Elementweise angewendet
  • list: für beliebige Listen von Objekten (auch rekursiv)
  • factor: ein factor ist ein vector zur spezifischen Klassifizierung von Objekten. zus. Attribute: levels beinhaltet die Kategorien, labels beschreibt die Namen der Kategorien. Plus exclude und ordered.
  • array: ist ein Vektor mit dem zusätzichen Attribut dim, welches die Diemension des Arrays abspeichert. Es können auch mehrdimensionale Arrays erstellt werden.
  • data.frame: sidn zum abspeichern von Tabellen gedacht. Alle Spaltenelemente müssen die gleiche Länge haben. Spezielle Attribute: row.names,

Objekte können folgende Eigenschaften haben (können mittels attributes() Funktion abgerufen werden):

  • names, dimnames
  • dimensions
  • class
  • length
  • user defined / metadata
  • inf -> infinity (unendlich)
  • NaN -> not a number (missing value or undefined)

Konvertieren von Datentypen

Zieltyp Funktion Ausgangstypen
numeric as.numeric FALSE -> 0, TRUE -> 1
"1", "2",... -> 1, 2,...
"A", "h",.. -> NA
logical as.lgical
0 -> FALSE

andere Nummern -> TRUE

"FALSE", "F" -> FALSE

"TRUE", "T" -> TRUE

andere Character -> NA

character as.character
1, 2,... -> "1", "2",...
FALSE, F,.. -> "FALSE"

TRUE, T -> "TRUE"

Control Statements

if Bedingung


for Schleife Eine for Schleife wird in R oftmals dazu verwendet, über einen Vektor oder eine Matrix drüber zu gehen.


Dabei ist darauf zu achten, dass der Index nur eine boolsche Variable ist und nicht wie in vielen anderen Programmiersprachen eine Zahl, die bei jedem Schleifendurchlauf um eins erhöht wird. Daher funktioniert folgender code nicht:

vector <- 1:10
for(i in seq_along(vector)) {
  value <- vector[i]
}

Lösung:

vector <- 1:10
index <- 1
for(i in seq_along(vector)) {
  value <- vector[index]
  index <- index + 1
}

while Schleife

Hilfe

näheres unter Hilfe suchen

nötige Informationen:

  • R Version
  • Packages plus Version
  • Betriebssystem
  • Fehlermeldung
  • Entwicklungsumgebung

in R

  • help("functionName") # will display help on the named function
  •  ?functionName # same as above
  • help.search("aString") # search help system for entries containing "aString"
  •  ??aString # same as above
  • help(package=base) # get a list of all functions, datasets, etc in package base
  • example("functionName)" # display examples of the use of function functionName
  • demo() # list all demos in loaded packages
  • demo(Hershey) # run the Hershey demo
  • RSiteSearch("topic") # search for the string topic in online documentation
  • apropos("foo", mode="function") # list all functions with foo in their name
  • data() # list all available datasets
  • args("functionName") # will list the arguments accepted by function functionName
  • help.start() # access to R manuals in a browser window.
  • vignette() # list the names of all introductory articles available in PDF format
  • vignette("name") # display the name vignette in a PDF reader

Debuggen

Befehle:

  • traceback
  • debug
  • browser
  • trace
  • recover

Im Debugger:

  • n -> nächste Line

print und cat werden auch gerne zum Debuggen verwendet.

Funktionen

R Cheatsheet

Basis

  • ls() - anzeigen, welche Daten-Objekte geladen sind
  • rm() -> entfernen eines Datentypes
  • rm(list=ls()) -> entfernen aller Datetypen
  • c() - concatenate => erzeugt immer einen homogenen Datentypen => wenn c("Name", 43, "Murbach 24", 14000) eingegeben wird, erzeugt c() einen Charakter Vektor.
  • dimnames(x)1 <- letters[1:8] => spalten und zeilen mit Buchstaben durchnummeriert
  • names() => Variablen anschauen
  • str() => Struktur der Daten ansehen
  • dir() => Dateein des Arbeitsverzeichnisses
  • sort()
  • mode()
  • length()
  • attributes()
  • names()
  • search()
  • sessionInfo() => gibt die aktuelle Arbeitsumgebung aus; zum Dokumentieren hilfreich!
  • split(X, index, ...): Trennt den Vektor X nach der Faktor-Liste index auf. Gibt eine Liste mit Vektoren der einzelnen, aufgetrennten Elemente retour. Miitels list(f1, f2) wird interaction() aufgerufen und eine Kombination aus den beiden Vektoren f1 und f2 erzeugt werden.
  • interaction()
  • data.entry() => damit kann man Daten direkt in einem Editor verändern

Loop Funktionen

lapply(X, function, ...) X = Liste

Steht für list apply. loopt über eine Liste an Elementen und wendet die Funktion auf alle Listenelemente an. Gibt immer eine Liste retour. Als Funktionen können eigens geschriebene oder in R vorhandene oder anonyme Funktionen verwendet werden. Die Listen-Elemente können auch als Variablen für Funktionen verwendet werden. Video


sapply(X, function, ...) X = Liste

vereinfachte (simplified) Variante von lapply. Wenn die Länge aller Listenelemente gleich lang ist, wird eine Matrize retour gegeben. Wenn die Länge aller Listenelemente gleich 1 ist, wird ein Vektro retour gegeben. Ansonsten wird auch eine Liste retour gegeben. Video


apply(X, margin, function, ...) X = Array Anwenden der Funktionen auf ein Array. Margin ist die Dimension: 1 = Reihe, 2 = Spalte, 3 = 3te Dimension, usw. Video


tapply(X, index, function, ..., simplify = True), X = Vektor, index = Faktor

tapply wendet eine Funktion an einen Teil des Vektors an, je nach Übergabe des Faktor-Vektors index.


mapply:

Ist die multivariate Variante.

Eigene Funktionen

Reihenfolge bei der Kontrolle der Argumenten:

  • Name des Arguments
  • Partial Matching des Namens
  • Position des Arguments
getsum <- function(val1, val2) {
  data <- val1 + val2
  data
}

Übergabe von Daten: Einfach Variable am Ende schreiben.

Matrizen

  • cbind => column bind
  • matrix()
  • t() => transponiert eine Matrize
  • crossprod()
  • solve(A, b)
  • eigen()
  • svd()
  • diag()
  • lsfit()
  • table()

Lesen / Schreiben von Daten

Bei großen Datensets macht es Sinn, zuerst einen kleinen Teil rein zu laden (nrows = 100) und aus diesen die Classes raus zu lesen. Mit dem Klassen Vektor kann dann das ganze Datenset importiert werden.

  • read.table: für kleine, moderate Datensätze
    • sep: Trennzeichen der Spalten
    • colClasses: Vektor der die Klassen der Datenfelder enthält. Wenn Datensatz sehr groß ist, sollte dies manuel gemacht werden, da die automatische Detektion von R Rechenleistung benötigt
    • comment.char: Zeichen, welches Kommentare auszeichnet. Rechts davon werden Zeichen nicht übernommen.
    • skip: Offset der Zeilen
    • stringsAsFactors: sollen char Variablen als integer gelesen werden
  • read.csv: das selbe wie read.table, der Seperator ist aber schon auf Komma gesetzt
  • read.csv2() => Hilfe
  • dput: schreibt R Objekte in R-Skripts
  • dget: importiert die Objekte aus R Skripts. Geht nur mit einem Objekt
  • dump: wie dput, nur mit mehreren Objekten
  • source: wie dget, nur mit mehreren Objekten
  • download.file() => runterladen einer Datei, bei https kann es sein, dass curl als Methode verwendet werden muss. Es ist hilfreich, das Datum im Dateinamen mit ab zu speichern

Verbindungen

Verbindung am Ende schliessen

  • file
  • url
  • gzfile
  • bzfile

Mathematik

  • sqrt() - Wurzel
  • pi
  • log()
  • x %% y => Modulu (Rest in float)
  • x %/% y => Modulu (Rest in ganzen Zahlen)
  • min(...) # Minimum
  • max(...) # Maximum
  • mean(...) # arithmetisches Mittel
  • median(...) # Median
  • sum(...) # Summe über Vektorelemente
  • prod(...) # Produkt über Vektorelemente
  • cumsum(...)
  • cumprod(...)
  • log10(...) # 10er Logarithmus
  • exp(...) # Exponentialfunktion
  • abs(...) # Absolutbetrag
  • sin(...), cos(...), tan(...), asin(...), acos(...), atan(...)
  • sinh(...), cosh(...), tanh(...), asinh(...), acosh(...), atanh(...)
  • gamma(...) # Gammafunktion
  • rnorm
  • dnorm
  • pnorm
  • qnorm
  • rpois

Plotting

Diagramme [4]. Dabei ist aufzupassen, Variablen mit NA werden nicht geplottet und gehen somit in bei der Visualisierung verloren.

Packages:

  • graphics
  • lattice
  • grid
  • grDevices

base package

Plots

  • plot
  • hist()
  • boxplot()
  • barplot()

wichtige Fragen:

  • für welches Gerät ist der plot?
  • ist der plot nur temporär oder endet er in einem Paper*
  • wieviele Daten fliessen in den Plot ein?
  • soll es möglich sein, in die Grafik rein zu zoomen?
  • welches Package wird verwendet? Es kann nämlich nicht zwischen den Grafik Packeten hin und hergewechselt werden.

par Funktion par stellt die Optionen für Plots ein und wirkt sich auf alle Plots aus (global)

Optionen:

  • pch -> default ist ein offener Kreis
  • lty -> default ist durchgehende Linie
  • lwd -> Linienstärke
  • col -> Farbe
  • las -> Ausrichtung der Achsenbeschriftungen
  • bg -> Hintergrundfarbe
  • mar -> margin
  • oma -> äußere margin
  • mfrow -> Anzahl der Plots pro Reihe (reihenweises füllen)
  • mfcol -> Anzahl der Plots pro Reihe (spaltenweises füllen)

Folgende Funktionen können nur auf einen bereits bestehenden Plot angewendet werden:

  • plot
  • lines
  • points
  • text
  • title
  • mtext
  • axis

Devices

Eine Liste der Devices (Geräte) kann mittels ?Devices angesehen werden.

  • pdf_ standard, aber nicht Open Source und Formatierung kompliziert
  • postscript: älter
  • xfig
  • PNG
  • jpeg
  • bitmap
  • bmp

lattice package

Lattice Funktionen verwenden generell Formeln für das erste Argument (y ~ x | f * g). Links ist die y Varibale, rechts die x Variable.

Es gibt einen fundamentalen Unterschied zu base graphics: Base graphics Funktionen plotten Daten direkt in die Graphic Device, Lattice Funktionen geben ein Objekt der Klasse trellis retour.

  • xyplot
  • bwplot
  • histogram
  • stripplot
  • dotplot
  • splom
  • levelplot, contourplot

Farben

  • colorRamp
  • colorRampPalette

Simulation

  • set.seed(1) -> setzt die Zufallsverteilungen wieder zurück (für die Reproduzierbarkeit!)

Analysen

räumliche Analysen

Zusammenfassung zu räumlicher Analyse in R [5] [6]

Spatial Tips

sp package

bietet Classes für räumliche Objekte an (points, lines, polygons, grids), aber von sich aus keine statistischen Analysen

Lernen

Da R eine sehr umfangreiche Sprache ist und es bereits gute Skripten, Manuals und Hilfen gibt, werden hier nur die wichtigsten Schritte und Befehle angeführt. O Reily hat auch eine Codeschool gestartet [7].

Ein guter Einstieg ist sicherlich der sehr gut aufbereitete Online Kurs Computing for Data Analyses von Robert Peng. Wir haben dazu den gesamten Code auf GitHub gestellt, womit einfaches nachmachen und ausprobieren leicht gemacht wird.

Gute Skripten, Tutorials sind:

Wenn Statistik einher mit R gelernt werden möchte, ist das etwas umfangreichere Skriptum Angewandte Statistik fuer die biologischen Wissenschaften von Dormann und Kühn hilfreich.

R und viele Packages liefern Datensätze zum Arbeiten und Trainieren mit.

data(warpbreaks)
 
library(spatstat)
data(ants)
 
library(ElemStatLearn)
data(bone)
data(marketing)
data(zip.train)
 
library(datasets)
data(iris)
 
library(UsingR); 
data(galton)
 
library(gstat)
data(meuse)

Templates

Quellen

WIKI's

Tutorials / Manuals / Skripten:

Kurse:

Literatur

Video

Referenzen

  1. R Eintrag auf Wikipedia https://de.wikipedia.org/wiki/R_%28Programmiersprache%29
  2. http://igraph.sourceforge.net/index.html 2012-09-25
Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Hilfe
Open Science
Sonstiges
Werkzeuge