Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

R (Programmiersprache)

R ist eine freie Programmiersprache für statistische Berechnungen und Grafiken. Sie wurde 1992 von Statistikern für Anwender mit statistischen Aufgaben neu …

Inhalt6 Abschnitte
  1. 1. Was R ist
  2. 2. Programmiermodell und Daten
  3. 3. Funktionen, Pakete und Schnittstellen
  4. 4. Benutzung und Einbindung
  5. 5. Entwicklung, Versionen und Gemeinschaft
  6. 6. Stärken, Grenzen und Beispiel

Was R ist

R ist eine freie Programmiersprache für statistische Berechnungen und Grafiken. Sie wurde 1992 von den Statistikern Ross Ihaka und Robert Gentleman entwickelt und im August 1993 veröffentlicht. R orientiert sich syntaktisch an S und semantisch an Scheme; die Sprache ist mit S weitgehend kompatibel. Die Standarddistribution ist ein Interpreter mit Kommandozeilenumgebung und wenigen grafischen Schaltflächen. R läuft auf Unix-artigen Systemen einschließlich macOS und Linux, auf Windows und auf Mac OS und steht unter der GNU GPL. R ist Teil des GNU-Projekts.

R muss nicht kompiliert werden: Eingaben werden nach dem Drücken der Enter-Taste unmittelbar ausgeführt. Programme können auch als Skripte laufen. Viele integrierte Entwicklungsumgebungen, besonders RStudio, erleichtern die Bedienung. R gilt als Standardsprache für statistische Problemstellungen in Wirtschaft und Wissenschaft. Im Artikel werden außerdem Platzierungen im TIOBE-Index (21), im RedMonk-Ranking (12), bei PYPL (6) und beim Institute of Electrical and Electronics Engineers (11) genannt.

R konzentriert sich auf Statistik, ist aber nicht auf Statistiksoftware im engen Sinn beschränkt. Charakteristisch sind speziell für statistische Aufgaben entwickelte Datenstrukturen und Funktionen sowie flexible Möglichkeiten zur Grafikerzeugung. Zahlreiche Pakete ergänzen die Standardfunktionen für unterschiedliche Fachgebiete; eigene Funktionen können ebenfalls erstellt werden.

Programmiermodell und Daten

R ist eine Multiparadigmensprache der vierten Generation. Sie verbindet funktionale, dynamische und objektorientierte sowie objektorientierte Programmierung. Zwei Leitgedanken von John M. Chambers lauten: „Alles, was existiert, ist ein Objekt. Alles, was passiert, ist ein Funktionsaufruf.“ Funktionen sind First-Class-Objekte: Sie können erstellt, unter anderem Namen gespeichert, überschrieben, anonym definiert und an andere Funktionen übergeben werden. R unterstützt unter anderem Closures, Lambda-Funktionen, Rekursion, Currying, Reflexion und Funktionen höherer Ordnung.

R verwendet lexikalisches Scoping: Für die Funktionsweise einer Funktion ist die Umgebung entscheidend, in der sie erstellt wurde, nicht die Umgebung, aus der sie aufgerufen wird. Außerdem gilt Lazy Evaluation, also die Auswertung von Code erst bei Bedarf. Funktionen bestehen aus Argumenten, Körper und Umgebung. Argumente können notwendig oder optional sein, Standardwerte besitzen und teilweise abgekürzt werden. Eingelesene Daten liegen im Hauptspeicher; R speichert sie spaltenorientiert, verwendet Garbage Collection und Lazy Loading und kennt kein Aliasing. Referenzen werden per Deep Copy übergeben.

R unterscheidet Groß- und Kleinschreibung. Objekte werden meist mit <-, häufig auch mit =, zugewiesen. Der Operator <<- weist einer Variablen in der nächsthöheren Umgebung einen Wert zu. Eckige Klammern dienen der Indizierung, das Dollarzeichen der namensbezogenen Indizierung, geschweifte Klammern der Bildung von Blöcken und # dem Einleiten eines Kommentars. Kontrollstrukturen sind if, else if, else, ifelse, switch sowie for, while und repeat ... if ... break; Goto-Sprunganweisungen gibt es nicht. In statistischen Formeln trennt die Tilde (~) die abhängige Variable links von den erklärenden Variablen rechts.

Atomare Datentypen sind NULL, logische Werte TRUE und FALSE, numerische double- und integer-Werte, komplexe Werte, Zeichenketten und raw für Bytes. Skalare gibt es nicht; die grundlegende Datenstruktur ist der Vektor. Vektoren, Matrizen und Arrays enthalten jeweils Elemente desselben Datentyps, und der erste Index ist 1. Data-Frames sind matrizenförmig, dürfen aber Spalten verschiedener Datentypen enthalten. Listen können beliebige R-Strukturen und Datentypen aufnehmen. Bei unterschiedlich langen Objekten wird häufig Recycling verwendet. Fehlende Werte heißen NA, nicht-definierte Werte NaN. Attribute wie Name, Klasse und Dimension liefern zusätzliche Metadaten.

R besitzt vier Klassensysteme: den Basis-Typ, S3, S4 und Referenzklassen. S3-Klassen haben keine formale Klassendefinition; Methoden gehören zu generischen Funktionen. S4-Klassen definieren Felder und Vererbung, erlauben mehrfache Vererbung und Multimethoden. Bei Referenzklassen gehören Methoden zu Klassen, Objekte sind veränderlich, und der Methodenaufruf verwendet das Dollarzeichen.

Funktionen, Pakete und Schnittstellen

Die Grundinstallation enthält Funktionen zur Dateiverwaltung, zum Herunterladen, Entpacken und Einlesen, zur Umwandlung und Prüfung von Datenstrukturen, zur Zeichenkettenbearbeitung mit regulären Ausdrücken oder printf sowie für Schleifen, Bedingungen und die apply- und MapReduce-Familien. Enthalten sind außerdem deskriptive Statistik, lineare und generalisierte lineare Modelle, Varianzanalyse, ARMA-Modelle, Interpolation und Glättung, Kalman-Filter, Fourier-Transformation, Zeitreihendekomposition, Hauptkomponenten- und Faktorenanalyse, multidimensionale Skalierung, hierarchische Clusteranalyse und K-Means. Hinzu kommen statistische Tests, Wahrscheinlichkeitsverteilungen, Matrixoperationen und Optimierungsalgorithmen.

Die Standardbibliothek umfasst 29 Pakete. 14 wichtige Pakete werden bei jedem Programmstart geladen, 15 weitere gelten als empfohlen. Zusätzliche Pakete werden vor allem über CRAN bezogen; CRAN enthält über 10000 Pakete, Bioconductor 1294 Pakete, insbesondere für Bioinformatik und Genexpressionsdaten. CRAN ordnet die verfügbaren Pakete in 33 kommentierte Task Views ein, etwa zu maschinellem Lernen, Zeitreihenanalyse, Optimierung, Finanzen, Genetik und reproduzierbarer Forschung.

R kann viele Datenformate und Programme einbinden. Das Paket foreign unterstützt unter anderem SPSS, SAS, Stata, SYSTAT, Minitab, GNU Octave und Weka; readxl liest Microsoft-Excel-Dateien. XML, YAML, NetCDF, HDF5, FITS, Shapefiles und KML werden durch weitere Pakete unterstützt. Datenbank-Schnittstellen bestehen unter anderem für MySQL, MariaDB, SQLite, Microsoft SQL Server, PostgreSQL, Oracle, MongoDB, Redis, Neo4j, Cassandra und Elasticsearch. SparkR bindet Apache Spark ein, sqldf ermöglicht SQL-ähnliche Abfragen innerhalb von R.

Für andere Programmiersprachen gibt es unter anderem Rcpp für C++, rJava für Java, rPython für Python, rscala für Scala, RCall für Julia und rpy2 für Python. Webservices können mit rvest, RSelenium oder mailR genutzt werden. R-Code lässt sich mit knitr oder Sweave in LaTeX sowie mit knitr und rmarkdown in HTML oder Markdown einbetten. ggplot2, lattice, plotly, shiny und rgl dienen der Erstellung statischer, interaktiver oder dreidimensionaler Grafiken. devtools, roxygen2, RUnit und testthat unterstützen Paketentwicklung, Dokumentation und Tests.

Benutzung und Einbindung

Die Installation enthält RGui, eine Kommandozeilenumgebung mit Menüs für Hilfe, Paketverwaltung, Arbeitsumgebung und Skripte. Erweiterte Oberflächen und Entwicklungsumgebungen sind unter anderem RStudio, Visual Studio Code, JGR, RKWard, Cantor, StatET und Architect. Typische Funktionen sind Autovervollständigung, automatische Einrückung, Syntaxhervorhebung, Code-Faltung, integrierte Hilfe, Daten-Viewer und teilweise Git-Unterstützung sowie grafisches Debugging. Auch Editoren wie Vim, Emacs, Kate, Geany, Sublime Text und Notepad++ unterstützen R. R kann außerdem in GNU TeXmacs, LyX, ShareLaTeX, Org-mode und Zim verwendet werden.

Als paketbasierte Oberflächen gibt es R-Commander (Rcmdr), relax, rattle für Data Mining, RQDA für qualitative Datenanalyse und statnet für Netzwerkanalyse. Sie stellen Menüs für Datenmanagement, explorative und analytische Statistik sowie Standardgrafiken bereit. Oberflächen können mit Tk, GTK oder Qt erstellt werden.

Alternative Interpreter verfolgen Ziele wie höhere Geschwindigkeit, Parallelverarbeitung oder bessere Einbindung in andere Software. pqR ist eine schnellere Abspaltung von GNU R und unter Linux lauffähig; Renjin und FastR basieren auf Java beziehungsweise der Java Virtual Machine, Riposte auf C++, und CXXR ist eine weitere C++-Abspaltung. Genannt werden unter anderem Just-in-time-Kompilierung, automatische Nutzung mehrerer Prozessorkerne und verbesserte Speicherverwaltung.

R ist in zahlreiche Business- und Analyseplattformen eingebunden, darunter Microsoft R Server und SQL Server, TIBCO Spotfire mit TERR, Oracle R Enterprise, IBM Big R, SAP HANA, HP Haven Predictive Analytics, Tableau, QlikView und MicroStrategy. Statistik- und Mathematikprogramme wie SAS, SPSS, MATLAB, Maple, Mathematica, KNIME und RapidMiner stellen ebenfalls Schnittstellen bereit. Über rApache, Rserve und Rwui kann R als Skriptsprache in Serverumgebungen und Webanwendungen eingesetzt werden.

Entwicklung, Versionen und Gemeinschaft

R entstand an der Universität Auckland aus dem Wunsch, die statistischen Möglichkeiten von S mit verbessertem Scoping und einer Speicherverwaltung mit Garbage Collection zu verbinden. Die Entwickler schrieben zunächst einen Scheme-Interpreter und passten ihn an S an. R wird in R selbst sowie in C und Fortran entwickelt; 2011 bestanden 22 % des Quelltexts der Standardbibliothek aus R-Code, 52 % aus C und 26 % aus Fortran.

1993 wurde R erstmals öffentlich über StatLib verbreitet. Seit Juni 1995 steht die Sprache unter der GNU GPL. 1997 entstand das R Development Core Team, heute R Core Team, und am 23. April 1997 startete CRAN. Die erste als stabil betrachtete Version 1.0 erschien am 29. Februar 2000. Seit April 2001 gibt es R für macOS; im September 2002 wurde die R Foundation for Statistical Computing in Wien gegründet. Version 2.0 vom 4. Oktober 2004 führte Lazy Loading ein, Version 2.1 vom 18. April 2005 Internationalisierung und Zeichenkodierungen einschließlich UTF-8. Version 2.11 vom April 2010 unterstützte 64-Bit-Systeme und bis zu acht Terabyte Arbeitsspeicher. Version 2.13 brachte Bytecode-Kompilierung, Version 2.14 vom Oktober 2011 grobkörnige Nebenläufigkeit und Version 3.0 vom April 2013 Indexwerte von 2^31 und größer auf 64-Bit-Systemen.

Versionsnummern bestehen aus drei Zahlen: Die erste steht für grundlegende Änderungen, die zweite für normale Änderungen und die dritte überwiegend für Fehlerbehebungen. Seit 2.14.0 besitzen Versionen zusätzlich Peanuts-Codenamen. Im Artikel ist 4.6.1 vom 24. Juni 2026 als aktuelle Version angegeben.

Die R Foundation verwaltet Urheberrecht und Dokumentation, fördert die Verbreitung und gibt das zweimal jährlich erscheinende R Journal heraus. Die useR!-Konferenz findet jährlich statt; die Teilnehmerzahl stieg von 194 in Wien 2004 auf 1.200 in Brüssel 2017 und 1.178 in Toulouse 2019. 2015 wurde das R Consortium als Teil der Linux Foundation gegründet, um die Nutzung von R in Unternehmen zu verbessern. Das erste geförderte Projekt war R-Hub für die Erstellung und Prüfung von Paketen.

Stärken, Grenzen und Beispiel

Zu den Stärken von R zählen die freie Lizenz, der offene Quellcode, die kostenlose Nutzung auf verschiedenen Betriebssystemen, die große Zahl statistischer Methoden und Pakete sowie die flexible Anpassbarkeit von Datenstrukturen und Grafiken. Neue statistische Verfahren werden häufig früh in R verfügbar. R kann viele Dateiformate, Datenbanken, Programmiersprachen und externe Programme einbinden. Als Nachteile nennt der Artikel, dass eine vollständige grafische Benutzeroberfläche fehlt, Programmier- und Statistikkenntnisse nötig sind, Dokumentation und Benennungen teilweise uneinheitlich sind und neue Pakete keiner umfassenden Qualitätssicherung unterliegen. Die Performance-Optimierung steht teilweise hinter der statistischen Funktionalität zurück; für bestimmte Aufgaben werden deshalb andere Sprachen verwendet.

Ein einfaches Beispiel berechnet den Pearson-Korrelationskoeffizienten zweier numerischer Vektoren:

Groesse <- c(176, 166, 172, 184, 179, 170, 176) Gewicht <- c(65, 55, 67, 82, 75, 65, 75) cor(Gewicht, Groesse, method = „pearson“)

Das Ergebnis lautet 0.9295038. Eine weitergehende lineare Regression wird mit lm durchgeführt; die Tilde trennt Zielvariable und erklärende Variable:

reg <- lm(Gewicht~Groesse) summary(reg)

Mit plot(Gewicht~Groesse) wird ein Streudiagramm erzeugt, mit abline(reg) die Regressionsgerade ergänzt.

Lernvideos zu R (Programmiersprache)

Weiterlesen

Funktionale Programmierung Funktionale Programmierung ist ein Programmierparadigma, in dem Funktionen nicht nur definiert und angewendet werden können, sondern auch wie Daten … Dynamische Programmierung Dynamische Programmierung ist eine Methode zum algorithmischen Lösen eines Optimierungsproblems durch Aufteilung in Teilprobleme und systematische … Objektorientierte Programmierung Die objektorientierte Programmierung (kurz OOP) ist ein auf dem Konzept der Objektorientierung basierendes Programmierparadigma. Die Grundidee besteht darin … Julia (Programmiersprache) Julia ist eine höhere Programmiersprache, die vor allem für numerisches und wissenschaftliches Rechnen entwickelt wurde und auch als … Programmiersprache Bei deklarativen Programmiersprachen ist der Ausführungsalgorithmus schon vorab festgelegt und wird nicht im Quelltext ausformuliert/beschrieben, sondern es … Syntax Die Syntax behandelt Sätze nicht nur als eine Aneinanderreihung von Wörtern, sondern arbeitet eine zugrundeliegende Satzstruktur heraus, die neben der … Semantik In einem engeren Sinn behandelt die Semantik die Bedeutung vor allem sprachlicher Zeichen, wie Sätzen, Satzteilen, Wörtern oder Lexemen. Sie ist dann Teil der … Integrierte Entwicklungsumgebung Eine integrierte Entwicklungsumgebung (IDE, von englisch integrated development environment) ist eine Sammlung von Computerprogrammen, mit denen die … Grafische Benutzeroberfläche GUI von englisch graphical user interface) bezeichnet eine Form von Benutzerschnittstelle eines Computers. Sie hat die Aufgabe, Anwendungssoftware auf einem … Explorative Datenanalyse Die explorative Datenanalyse (EDA) oder explorative Statistik ist ein Teilgebiet der Statistik. Sie untersucht und begutachtet Daten, von denen nur ein … Variable (Programmierung) In der Programmierung ist eine Variable ein abstrakter Behälter für einen Wert, der bei der Ausführung eines Computerprogramms auftritt. Speicherverwaltung Das Verwalten der höheren Ebenen der Speicherhierarchie wie beispielsweise des Cache-Speichers wird dagegen üblicherweise von der Hardware vorgenommen.