# 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 entwickelt. Die Syntax orientiert sich an der Programmiersprache S, mit der R weitgehend kompatibel ist, und die Semantik an Scheme. Als Standarddistribution und Referenzimplementierung wird R mit einem Interpreter als Kommandozeilenumgebung mit reduzierten grafischen Schaltflächen vom R Project selbst angeboten. So ist R aktuell auf den wichtigsten Plattformen verfügbar; die Umgebung wird von den Entwicklern ausdrücklich ebenfalls als R bezeichnet. R ist Teil des GNU-Projekts. Viele integrierte Entwicklungsumgebungen unterstützten R und erhöhen so die Benutzerfreundlichkeit, beispielsweise RStudio.
Zahlreiche online abrufbare Pakete enthalten zusätzliche Funktionen, um Daten hinsichtlich Fragestellungen aus unterschiedlichen Fachbereichen zu analysieren; weitere eigene Funktionen können erstellt werden. Die Sprache bietet Schnittstellen zu anderen Programmiersprachen und Möglichkeiten zur Integration in verschiedene Software. R grenzt sich in mehrerer Hinsicht von anderen bekannten Statistik-Umgebungen ab und ist nicht mehr ausschließlich als Statistiksoftware zu bezeichnen. Obwohl andere, heutzutage mit grafischen Benutzeroberflächen versehene Statistik-Umgebungen wie SPSS ebenfalls als spezialisierte Programmiersprachen begannen (und diese Fähigkeit bis heute beibehalten), fokussiert sich R auf seine Stärke als Statistik-orientierte Programmiersprache. R grenzt sich von anderen Programmiersprachen durch die für Statistik entworfenen Datenstrukturen und Funktionen sowie die besonderen Möglichkeiten bei der Grafikerzeugung ab.
R gilt als eine Standardsprache für statistische Problemstellungen sowohl in der Wirtschaft als auch in der Wissenschaft. Im TIOBE-Index belegt R Platz 21, im Ranking von RedMonk Platz 12, bei PYPL Platz 6 und beim Institute of Electrical and Electronics Engineers Platz 11.

## Geschichte
### Ursprünge (1992)

R wurde 1992 von den Statistikern Ross Ihaka und Robert Gentleman an der Universität Auckland entwickelt. Sie orientierten sich eng an der in den Bell Laboratories (heute Teil von Alcatel-Lucent und somit Nokia) entwickelten Sprache S, die zur Verarbeitung statistischer Daten dient. R kann als freie Implementierung von S angesehen werden. Daher ist die Mehrzahl der für S geschriebenen Programme unter R lauffähig. Der Name der Sprache ist auf den Anfangsbuchstaben der Vornamen der Entwickler (Ross Ihaka und Robert Gentleman) zurückzuführen und zudem in Anlehnung an S entstanden.
S hatte eine andere Herangehensweise als bisherige Software für Statistik. Mit S konnten Daten schneller explorativ untersucht werden und passende Grafiken erstellt werden, während Analysefunktionen zu Beginn der 1990er Jahre noch nicht umfangreich implementiert waren. Das Unternehmen Statistical Sciences, Inc. erwarb eine alleinige Lizenz für die Verbreitung von S-Software ab 1993. Ihaka und Gentleman mochten die Herangehensweise und Möglichkeiten, die S für statistische Fragestellungen bot (damalige Version: S3). Sie bemängelten die Scoping-Fähigkeiten von S, bei denen klar zwischen lokalen und globalen Variablen unterschieden wurde und insbesondere die Speicherverwaltung, die ohne Garbage Collection zu schnellem Anwachsen des dynamischen Speichers führte. Sie wollten diese Eigenschaften in ihren Forschungsprojekten nutzen und zudem schneller und flexibler neue analytische Verfahren implementieren, ohne auf die S-Entwickler angewiesen zu sein. Daher erschufen sie R. Ein weiterer Vorteil war der verfügbare Quelltext, sodass sie R anschaulich für Lehrzwecke an der Universität einsetzen konnten.
Die Entwickler schrieben zuerst einen Interpreter für Scheme und wandelten die Sprache soweit ab, dass sie S ähnelte. Die Programmierung von R fand in C (sogenannte primitive Funktionen), Fortran (zum Beispiel BLAS und LAPACK für numerische lineare Algebra) und darauf aufbauend in R selbst statt. 2011 bestand der Quelltext der Standardbibliothek zu 22 % aus R-Code, während 52 % beziehungsweise 26 % aller Programmzeilen in C und Fortran geschrieben waren.

### Wachstum von Sprache und Community (1993–2000)

1993 wurde die Sprache erstmals öffentlich verbreitet: Die Designer luden Binärdateien ihrer bisherigen Arbeit in der Sektion StatLib der Carnegie Mellon University hoch, welches eine Sammelstelle und ein Distributionskanal für statistische Software war und erhofften sich Feedback. Zudem gab es separate Bekanntmachungen an Personen, die sich enger mit S befassten. Martin Mächler von der ETH Zürich war einer der Feedbackgebenden. Er ermunterte Ihaka und Gentleman zudem zur freien Distribution von R, sodass die Sprache seit Juni 1995 unter der GNU General Public License steht. Bis 1996 oder 1997 gab es zwischen 50 und 100 Leute in einer Mailingliste, die dabei halfen, die Sprache gemeinsam zu verbessern. Einige nutzten das zeitgleich sich verbreitende Betriebssystem Linux, wofür R die einzige Statistikumgebung war. Im Jahr 1997 wurde das R Development Core Team gebildet (heute R Core Team), das sich um die Weiterentwicklung von R kümmert und den Quellcode verändern kann. Mittlerweile zählen zwanzig Personen zu diesem engsten Entwicklerteam um Ross Ihaka und Robert Gentleman. Das Comprehensive R Archive Network (CRAN) als Plattform für Pakete startete am 23. April 1997, um Anwendern die Möglichkeit zu geben, selbst geschriebene Funktionen leichter mit Anderen zu teilen. Der älteste öffentlich verfügbare Quelltext für Unixoide fällt auf dieses Datum; die Alpha-Versionen für Windows und Mac (damals für das klassische Mac OS) erschienen kurze Zeit später. Am 29. Februar 2000 wurde die vom R Development Core Team als stabil betrachtete Version 1.0 veröffentlicht.

### Performance-Optimierung (seit 2001)

Seit April 2001 gibt es R für macOS, dem Nachfolgebetriebssystem des klassischen Mac OS. Im September 2002 gründeten die Mitglieder des R Development Core Teams den gemeinnützigen Verein The R Foundation for Statistical Computing in Wien, welcher sich um die Außendarstellung kümmert.
Die R-Version 2.0 wurde am 4. Oktober 2004 veröffentlicht. Seitdem nutzt R Lazy Loading, um Daten bei geringer Beanspruchung des Arbeitsspeichers schnell laden zu können. Ab Version 2.1 (18. April 2005) unterstützt R unterschiedliche Sprachversionen (Internationalisierung) und Zeichenkodierungen, insbesondere UTF-8.
In der Folge gab es einige Verbesserung der Performance. Dazu zählt die Einführung von Version 2.11 im April 2010, die R auf 64-Bit-Systemen nutzbar macht und bis zu acht Terabyte Arbeitsspeicher adressieren kann. Zusätzlich erschien mit der Version 2.13 das Paket compiler, welches in R geschriebene Funktionen zu Bytecode kompilieren kann und einen Just-in-time-Compiler enthält; mittlerweile sind die bereits existierenden, nicht vom Benutzer geschriebenen Funktionen bereits als Bytecode vorhanden. Zudem wurde im Oktober 2011 (Version 2.14) grobkörnige Nebenläufigkeit für parallele Ausführung von Funktionen eingeführt. Ab Version 3.0 (April 2013) sind Indexwerte von 2$^{31}$ und größer auf 64-Bit-Systemen möglich.

### Versionen

Die Versionsnummern von R bestehen aus drei durch Punkte voneinander getrennten Zahlen. Grundlegende Änderungen werden durch eine Erhöhung der ersten Zahl angezeigt, normale durch eine Erhöhung der zweiten Zahl. Die dritte Zahl wird bei neuen Versionen erhöht, die vorwiegend der Behebung von Bugs dienen. Seit R-Version 2.14.0 hat jede Version zusätzlich einen Codenamen, der aus den Benennungen der Peanuts-Comics und -Filme stammt, wie Version 3.3.1: „Bug in Your Hair“ oder Version 4.0.3: „Bunny-Wunnies Freak Out“.
| Versionsnummer | Erscheinungsdatum | Codename | Kommentar |
| 0.49 | 23.4.1997 | | Start von CRAN, erste öffentliche Unix-Version von R (Paket base) |
| 0.60 | 5.12.1997 | | |
| 0.61 | 21.12.1997 | | |
| 0.61.1 | 11.1.1998 | | |
| 0.61.2 | 17.3.1998 | | |
| 0.61.3 | 2.5.1998 | | |
| 0.62 | 14.6.1998 | | |
| 0.62.1 | 15.6.1998 | | |
| 0.62.2 | 10.7.1998 | | |
| 0.62.3 | 28.8.1998 | | |
| 0.62.4 | 23.10.1998 | | |
| 0.63 | 13.11.1998 | | |
| 0.63.1 | 4.12.1998 | | |
| 0.63.2 | 11.1.1999 | | |
| 0.63.3 | 5.3.1999 | | |
| 0.64.0 | 7.4.1999 | | |
| 0.64.1 | 7.5.1999 | | |
| 0.64.2 | 2.7.1999 | | |
| 0.65.0 | 27.8.1999 | | |
| 0.65.1 | 6.10.1999 | | Möglichkeit Pakete aus R heraus von CRAN zu installieren |
| 0.90.0 | 22.11.1999 | | Hinzufügung des Pakets splines für glättende Regressions-Splines und interpolierende Splines |
| 0.90.1 | 15.12.1999 | | |
| 0.99.0 | 7.2.2000 | | |
| 1.0.0 | 29.2.2000 | | erste von den Entwicklern als stabil betrachtete Version |
| 1.0.1 | 14.4.2000 | | |
| 1.1.0 | 15.6.2000 | | Hinzufügung des Pakets tcltk um auf das Tk-Toolkit zur Erstellung von grafischen Benutzeroberflächen zugreifen zu können |
| 1.1.1 | 15.8.2000 | | |
| 1.2.0 | 15.12.2000 | | überarbeitetes Speicherverwaltungssystem mit generationellem Garbage Collector |
| 1.2.1 | 15.1.2001 | | |
| 1.2.2 | 26.2.2001 | | |
| 1.2.3 | 26.4.2001 | | erste Version für macOS |
| 1.3.0 | 22.6.2001 | | |
| 1.3.1 | 31.8.2001 | | |
| 1.4.0 | 19.12.2001 | | Hinzufügung der Pakete methods, welches S4-Methoden bereitstellt, und tools zur Paketentwicklung und -verwaltung |
| 1.4.1 | 30.1.2002 | | |
| 1.5.0 | 29.4.2002 | | |
| 1.5.1 | 17.6.2002 | | |
| 1.6.0 | 1.10.2002 | | |
| 1.6.1 | 1.11.2002 | | |
| 1.6.2 | 10.1.2003 | | |
| 1.7.0 | 16.4.2003 | | |
| 1.7.1 | 16.6.2003 | | |
| 1.8.0 | 8.10.2003 | | Hinzufügung des Pakets grid für bessere Steuerung der Position von Grafiken in Output-Dateien |
| 1.8.1 | 21.11.2003 | | |
| 1.9.0 | 12.4.2004 | | die Pakete graphics (Grafiken), stats (Statistik-Funktionen) und utils (Programmier- und Entwicklerwerkzeuge) lösen sich aus dem Paket base (wichtigste R-Funktionen); die bisherigen Pakete ctest, eda, modreg, mva, nls, stepfun und ts werden ins neu geschaffene Paket stats verschoben, mle ins neu geschaffene Paket stats4 (statistische Funktionen für S4-Klassen); lqs ist nur noch empfohlener Bestandteil der Standardbibliothek |
| 1.9.1 | 21.6.2004 | | |
| 2.0.0 | 4.10.2004 | | Unterstützung von Lazy Loading; das Paket grDevices löst sich aus graphics um den Schritt der Datenvisualisierung von der Output-Datei zu trennen; Hinzufügung des Pakets datasets, welches Beispieldatensätze enthält |
| 2.0.1 | 15.11.2004 | | |
| 2.1.0 | 18.4.2005 | | Unterstützung verschiedener Zeichenkodierungen, Beginn mehrerer Sprachversionen |
| 2.1.1 | 20.6.2005 | | |
| 2.2.0 | 6.10.2005 | | |
| 2.2.1 | 20.12.2005 | | |
| 2.3.0 | 24.4.2006 | | |
| 2.3.1 | 1.6.2006 | | |
| 2.4.0 | 3.10.2006 | | |
| 2.4.1 | 18.12.2006 | | |
| 2.5.0 | 24.4.2007 | | |
| 2.5.1 | 28.6.2007 | | |
| 2.6.0 | 3.10.2007 | | |
| 2.6.1 | 26.11.2007 | | |
| 2.6.2 | 8.2.2008 | | |
| 2.7.0 | 22.4.2008 | | |
| 2.7.1 | 23.6.2008 | | |
| 2.7.2 | 25.8.2008 | | |
| 2.8.0 | 20.10.2008 | | |
| 2.8.1 | 22.12.2008 | | |
| 2.9.0 | 17.4.2009 | | |
| 2.9.1 | 26.6.2009 | | |
| 2.9.2 | 24.8.2009 | | |
| 2.10.0 | 26.10.2009 | | |
| 2.10.1 | 14.12.2009 | | |
| 2.11.0 | 22.4.2010 | | 64-Bit R |
| 2.11.1 | 31.5.2010 | | |
| 2.12.0 | 15.10.2010 | | Hinzufügung von Referenzklassen |
| 2.12.1 | 16.12.2010 | | |
| 2.12.2 | 25.2.2011 | | |
| 2.13.0 | 13.4.2011 | | Hinzufügung des Pakets compiler, welches eines Bytecode-Compiler bereitstellt |
| 2.13.1 | 8.7.2011 | | |
| 2.13.2 | 30.9.2011 | | |
| 2.14.0 | 31.10.2011 | Great Pumpkin | Hinzufügung des Pakets parallel, wodurch grobkörnige Nebenläufigkeit möglich wird |
| 2.14.1 | 22.12.2011 | December Snowflakes | |
| 2.14.2 | 29.2.2012 | Gift-Getting Season | |
| 2.15.0 | 30.3.2012 | Easter Beagle | |
| 2.15.1 | 22.6.2012 | Roasted Marshmallows | |
| 2.15.2 | 26.10.2012 | Trick or Treat | |
| 2.15.3 | 1.3.2013 | Security Blanket | |
| 3.0.0 | 3.4.2013 | Masked Marvel | Unterstützung von Indexwerten größer 2$^{31}$ |
| 3.0.1 | 16.5.2013 | Good Sport | |
| 3.0.2 | 25.9.2013 | Frisbee Sailing | |
| 3.0.3 | 6.3.2014 | Warm Puppy | |
| 3.1.0 | 10.4.2014 | Spring Dance | |
| 3.1.1 | 10.7.2014 | Sock it to Me | |
| 3.1.2 | 31.10.2014 | Pumpkin Helmet | |
| 3.1.3 | 9.3.2015 | Smooth Sidewalk | |
| 3.2.0 | 16.4.2015 | Full of Ingredients | Einige Konzepte aus pqR, einer beschleunigten Abart des R-Interpreters, wurden in R eingepflegt. Besseres Handling von großen Objekten im Arbeitsspeicher. |
| 3.2.1 | 18.6.2015 | World-Famous Astronaut | |
| 3.2.2 | 14.8.2015 | Fire Safety | |
| 3.2.3 | 10.12.2015 | Wooden Christmas-Tree | |
| 3.2.4 | 10.3.2016 | Very Secure Dishes | |
| 3.2.5 | 14.4.2016 | Very, Very Secure Dishes | |
| 3.3.0 | 3.5.2016 | Supposedly Educational | R kann jetzt auf allen Plattformen via HTTPS Dateien herunterladen. Neue Funktion sigma, welche aus verschiedenen statistischen Modellen die residual standard deviation berechnet. Einige Grundfunktionen (wie match) wurden neu implementiert und beschleunigt. |
| 3.3.1 | 21.6.2016 | Bug in Your Hair | |
| 3.3.2 | 31.10.2016 | Sincere Pumpkin Patch | |
| 3.3.3 | 6.3.2017 | Another Canoe | |
| 3.4.0 | 21.4.2017 | You Stupid Darkness | Der Just-In-Time-Byte-Code-Compiler ist standardmäßig aktiviert |
| 3.4.1 | 30.6.2017 | Single Candle | |
| 3.4.2 | 28.9.2017 | Short Summer | |
| 3.4.3 | 30.11.2017 | Kite-Eating Tree | |
| 3.4.4 | 15.03.2018 | Someone to Lean On | |
| 3.5.0 | 23.04.2018 | Joy in Playing | ALTREP Framework standardmäßig aktiviert (alternative Repräsentation von R Objekten) |
| 3.5.1 | 02.07.2018 | Feather Spray | |
| 3.5.2 | 20.12.2018 | Eggshell Igloo | |
| 3.5.3 | 26.03.2019 | Great Truth | |
| 3.6.0 | 26.04.2019 | Planting of a Tree | |
| 3.6.3 | 29.2.2020 | Holding the Windsock | 20. Geburtstag von R 1.0 |
| 4.0.0 | 24.04.2020 | Arbor Day | Als größte Neuerung werden nun alle Referenzen gezählt, so dass R-Programme effizienter mit dem Arbeitsspeicher umgehen. Matrizen werden nun konsistent als (zweidimensionale) Arrays implementiert. Für die Erstellung von Grafiken wurde die Farbpalette verbessert, so dass nun verschiedene Farbtöne dieselbe Luminanz aufweisen. |
| 4.0.1 | 2020-06-06 | See Things Now | |
| 4.0.2 | 2020-06-22 | Taking Off Again | |
| 4.0.3 | 2020-10-10 | Bunny-Wunnies Freak Out | |
| 4.0.4 | 2021-02-15 | Lost Library Book | |
| 4.0.5 | 2021-03-31 | Shake and Throw | |
| 4.1.0 | 2021-05-18 | Camp Pontanezen | |
| 4.1.1 | 2021-08-10 | Kick Things | |
| 4.1.2 | 2021-11-01 | Bird Hippie | |
| 4.1.3 | 2022-03-10 | One Push-Up | |
| 4.2.0 | 2022-04-22 | Vigorous Calisthenics | |
| 4.2.1 | 2022-06-23 | Funny-Looking Kid | |
| 4.2.2 | 2022-10-31 | Innocent and Trusting | |
| 4.2.3 | 2023-03-15 | Shortstop Beagle | |
| 4.3.0 | 2023-04-21 | Already Tomorrow | |
| 4.3.1 | 2023-06-16 | Beagle Scouts | |
| 4.3.2 | 2023-10-31 | Eye Holes | |
| 4.3.3 | 2024-02-29 | Angel Food Cake | |
| 4.4.0 | 2024-04-24 | Puppy Cup | |
| 4.4.1 | 2024-06-14 | Race for Your Life | |
| 4.4.2 | 2024-10-31 | Pile of Leaves | |
| 4.4.3 | 2025-02-28 | Trophy Case | |

## Eigenschaften

R muss nicht kompiliert werden und bringt Benutzereingaben in der Kommandozeilenkonsole nach Betätigen der Enter-Taste unmittelbar zur Ausführung. Es lassen sich zudem Programme in Skripten ausführen. Im Folgenden wird auf die Programmierparadigmen, Syntax und Datentypen eingegangen sowie die Dateiformate und Funktionalitäten der Standard-Version genannt:

### Programmierparadigmen

R ist eine Multiparadigmensprache der vierten Generation. Der kanadische Statistiker John M. Chambers, der S mitentwickelt hat, fasst die Funktionsweise von R folgendermaßen zusammen:
   “To understand computations in R, two slogans are helpful: Everything that exists is an object. Everything that happens is a function call.”
   „Um Berechnungen in R zu verstehen sind zwei Sätze hilfreich: Alles, was existiert, ist ein Objekt. Alles, was passiert, ist ein Funktionsaufruf.“
Das funktionale Herz ist von Scheme und Haskell inspiriert. Funktionen können als First-Class-Objekte neu erstellt, unter anderem Namen gespeichert, überschrieben (sie sind somit keine Schlüsselworte) und ihrerseits an andere Funktionen übergeben werden (Closures). Es ist möglich, Funktionen zu benennen oder anonym zu deklarieren (Lambda-Funktionen). Einige Funktionen sind dazu geschaffen, vektorwertig ausgeführt zu werden; für Rekursion wurde nicht optimiert. Viele Funktionen arbeiten unterschiedlich in Abhängigkeit vom Input (Reflexion). Oft gibt es notwendige Argumente für Funktionen (beispielsweise Daten), meistens weitere, optionale Argumente. Argumente können in Abhängigkeit anderer Argumente definiert werden. Argumente werden per deep copy übergeben. Die Namen der jeweiligen Funktionsparameter können beim Funktionsaufruf abgekürzt werden, sodass sie eindeutig sind oder weggelassen werden, sofern die Reihenfolge der Argumente mit derjenigen der Funktionsparameter übereinstimmt. Darüber hinaus gibt es die Möglichkeit beim Erstellen neuer Funktionen für Funktionsparameter Standardwerte zu setzen. Auch Currying ist möglich. Sofern nicht anders spezifiziert, ist das zuletzt zugewiesene Objekt innerhalb einer Funktion ihr Rückgabewert. Insgesamt bestehen Funktionen aus den Komponenten Argumente, Körper und Umgebung. Für die Funktionsweise von Funktionen ist die Umgebung entscheidend, in der sie erstellt wurde, nicht die, aus der sie aufgerufen wird. Dieses Lexical Scoping ist eine der Eigenschaften von Scheme, die in R übernommen wurde und in den anderen S-Implementierungen nicht existiert. Neu erstellte Objekte befinden sich in der Umgebung, in der sie erschaffen wurden, und jeder auszuwertende Ausdruck kann durch sein Ergebnis ersetzt werden (referenzielle Transparenz). R verwendet Lazy Evaluation, das heißt Code wird erst ausgewertet, wenn er benötigt wird (call by need). R kann daher mit Futures umgehen, was es darüber hinaus ermöglicht Funktionen ineinander zu verschachteln und unbegrenzte Datenstrukturen zu erstellen. Berechnungen auf symbolischer Ebene sind standardmäßig kein Bestandteil von R.
R hat zudem Eigenschaften, die für dynamische Programmierung typisch sind. Variablen können flexibel die Struktur verändern. Es ist möglich, Code für noch nicht ausgewertete Ausdrücke zu erhalten. Text kann dynamisch als Code ausgewertet werden. Des Weiteren können Futures mehrfach ausgewertet werden.
R implementiert die in der vierten Version von S hinzugefügten Klassen und Multimethoden für Ad-hoc-Polymorphie, sodass objektorientierte Programmierung möglich wurde. Als Klassensystem mit anderer Herangehensweise wurden Referenzklassen später hinzugefügt (siehe Unterabschnitt Klassen).
Eingelesene Daten speichert R im Hauptspeicher. Die Datenspeicherung erfolgt spaltenorientiert. R nutzt Garbage Collection und Lazy Loading zur Verringerung des Speicherbedarfs. Es gibt kein Aliasing.

### Syntax

R ist case sensitive, unterscheidet also Groß- und Kleinschreibung. Objekte können mit dem Zuweisungsoperator (<- und in vielen Fällen =) erstellt oder überschrieben werden. Für Objektnamen sind alphanumerische Zeichen, Punkt und Unterstrich erlaubt, als erstes Zeichen jedoch nur Buchstaben oder ein Punkt (in letzterem Fall ist das Objekt versteckt). Der Super-Zuweisungsoperator (<<-) weist Variablen der nächsthöheren Umgebung Werte zu und bildet die einzige Möglichkeit, Wirkungen zu erzielen. Funktionen dienen dazu, Variablen zu verändern, miteinander in Beziehung zu setzen, statistische Analysen durchzuführen und mehr. Nach dem Funktionsnamen steht beim Aufruf eine öffnende runde Klammer; die schließende runde Klammer schließt die Funktion ab. Innerhalb der Klammern können der Funktion Argumente übergeben werden, die durch Kommas getrennt werden. Die logischen, mathematischen und Zuweisungsoperatoren sowie Operatoren der Art %...% (dazu zählen alle benutzerdefinierten) werden üblicherweise statt einer Voranstellung zwischen zwei Argumenten platziert. Ein doppelter Doppelpunkt wie in Paket::Funktion greift auf Funktion aus Paket zu, ohne dass das Paket geladen ist oder zum Suchpfad hinzugefügt wurde. Funktionen, die nacheinander ausgeführt werden sollen, können durch Semikola getrennt werden oder in separate Codezeilen geschrieben werden. Eckige Klammern dienen der Indizierung von Elementen aus Datenstrukturen. Das Dollarzeichen ($) erleichtert – sofern vorhanden – eine Indizierung über Namen, sodass Inhalte assoziativ angesprochen werden können. Geschweifte Klammern legen Programmierblöcke fest. Text nach dem Rautezeichen (#) stellt bis zum Zeilenende einen Kommentar dar. Einrückungen und wiederholter Leerraum haben keinen Einfluss auf die Ausführung von R-Code.
Als Kontrollstrukturen gibt es if, else if, else und das elementweise ifelse sowie switch als bedingte Anweisungen und die Schleifen for (Zähl- und Mengenschleife), while (kopfgesteuert) sowie repeat ... if (Bedingung) break (fußgesteuert). Goto-Sprunganweisungen sind kein Bestandteil von R.
Im Bereich der statistischen Modelle werden bei vielen Verfahren Abhängigkeiten durch Formeln mit Hilfe einer Tilde (~) spezifiziert. Dabei stehen abhängige Variablen links und erklärende Variablen rechts von der Tilde. Arithmetische Operatoren haben in diesem Kontext eine andere Bedeutung und stehen für die Aufnahme und das Entfernen weiterer Variablen sowie die Einbeziehung von Interaktionseffekten.

### Datenstrukturen

Als atomare Datentypen existieren in R die leere Menge (NULL), logische (TRUE und FALSE), numerische (double), integer und komplexe Werte sowie Zeichenketten (character) und raw für Byte-Repräsentation.
Es gibt keine Skalare. Die einfachste vorkommende Datenstruktur ist der Vektor. Ein Vektor ist über die drei Eigenschaften Typ, Länge und Attribute definiert. Die Elemente von Vektoren (eindimensional), Matrizen (ein- oder zweidimensional) und Arrays (beliebig dimensional) müssen Elemente gleichen Datentyps sein. Rechenoperationen werden auf alle Elemente dieser Datenstrukturen angewendet. Bei Zuweisung unterschiedlicher Datentypen zu einem Vektor werden die Daten in den flexibelsten Datentyp umgewandelt. Das erste Element eines Vektors hat den Index 1.
Neben diesen homogenen Datenstrukturen werden oft Data-Frames verwendet, um Daten als Datensatz darzustellen. Data-Frames sind matrizenförmig, können jedoch aus Spalten unterschiedlicher Datentypen bestehen. Darüber hinaus gibt es Listen. In Listen sind Daten beliebiger R-Strukturen und Datentypen enthalten. Objekte verschiedener Datenstrukturen können gemeinsam in der Arbeitsumgebung existieren und gleichzeitig in Analysen verwendet werden. Wenn Datenstrukturen unterschiedlicher Dimensionen elementweise miteinander verknüpft werden, wird meistens sogenanntes Recycling verwendet, wobei das kürzere Objekt so lange aneinander gereiht wird, bis es die Länge des längeren Objektes erreicht.
Fehlende Werte werden in R als NA (Not Available) bezeichnet; benutzerdefinierte fehlende Werte können nicht angegeben werden. Nicht-definierte Werte werden als NaN (Not a Number) dargestellt.
Attribute liefern Metadaten zu R-Objekten. Name, Klasse (S3) und Dimension sind die wichtigsten Attribute. Sie bleiben in vielen Fällen beim Modifizieren von Objekten erhalten; die meisten anderen Attribute entfallen. Benutzerdefiniert können eigene Attribute ergänzt werden.

### Klassen

R verfügt über vier Klassensysteme. Der Basis-Typ wurde in C erstellt und bildet die Grundlage für die anderen Klassensysteme. S3-Klassen bestehen in R seit Beginn, S4-Klassen wurden den Klassen der später entwickelten vierten Version von S nachempfunden und Referenzklassen wurden als letztes hinzugefügt.
Im S3-Klassensystem gehören Methoden nicht zu Objekten oder Klassen, sondern zu Funktionen; sie entsprechen somit generischen Funktionen. Die generische Funktion entscheidet darüber, welche Methode aufgerufen wird. Es gibt keine formale Beschreibung einer Klasse. Um ein Objekt einer Klasse zuzuordnen, reicht es aus, das Attribut der Klasse zu setzen. Eine oft verwendete Klasse ist factor wobei ein integer-Vektor für kategoriale Variablen verwendet wird, indem den Zahlen Ausprägungen zugewiesen werden.
Das S4-Klassensystem ist eine Erweiterung der S3-Klassen. Die Funktionsweise ist ähnlich, sodass Methoden zu Funktionen gehören. Klassen haben jedoch formale Definitionen, welche die Felder und Vererbungsstrukturen (Basisklasse) beschreiben. Eine S4-Klasse besteht aus drei Eigenschaften: der Name zur Identifizierung der Klasse, eine Liste der Felder, um Namen der Felder und zugelassene Klassen zu definieren, sowie eine Zeichenkette mit der Klasse, von der sie abgeleitet ist. Mit S4-Klassen ist eine mehrfache Vererbung möglich. Es gibt Hilfsfunktionen um Methoden und generische Funktionen zu definieren. Das S4-Klassensystem implementiert Multimethoden, sodass generische Funktionen Methoden auf Grundlage der Klassen mehrerer Argumente auswählen können. Mit dem At-Zeichen (@) können Felder von einem S4-Objekt extrahiert werden. Objekt und Methode werden im Funktionsaufruf durch einen Punkt getrennt. Benutzerdefiniert können neue Klassen erstellt oder bestehende umdefiniert werden.
Im System der Referenzklassen gehören Methoden zu Klassen und nicht zu Funktionen. Methoden werden zu Objekten gesendet (Nachrichtenaustausch) und das Objekt entscheidet welche Funktion aufzurufen ist. Objekte sind veränderlich und verhalten sich ähnlich wie Objekte in den objektorientierten Sprachen Python, Ruby, Java und C#. Objekt und Methode werden im Funktionsaufruf durch das Dollarzeichen getrennt.

### Dateiformate

R-Code wird in Textdateien gespeichert, die üblicherweise die Dateiendung .R besitzen. Das Format .RData (oder kurz .Rda) wird verwendet, um ein R-Objekt, beispielsweise einen Datensatz, oder eine Kollektion von R-Objekten, also Daten und Funktionen, im R-internen binären serialisierten Format abzuspeichern, wobei diese Dateien zusätzlich standard-komprimiert sind. Die gesamte Arbeitsumgebung kann so ebenfalls als .RData-Datei gespeichert werden. Die zuletzt verwendeten Befehle in der Kommandozeile werden zudem als .Rhistory gespeichert. Einzelne Objekte können als .Rds gespeichert werden.
In R werden Daten oft durch CSV-Dateien und Textdateien importiert und exportiert. Mit Hilfe von Paketen (siehe Abschnitt Pakete) können zahlreiche andere Dateiformate (z. B. von Microsoft Excel und anderer Statistiksoftware) importiert und exportiert werden. Daten können zudem aus der Zwischenablage (clipboard) eingefügt werden.
Für die Erstellung von Grafiken können devices geöffnet werden, mit denen Output statt in die Konsole in Dateien geschrieben wird. Dabei werden die Grafikformate JPEG, PNG, SVG, TIFF, Windows Bitmap und Metafile sowie Cairo-Grafiken unterstützt. Außerdem können die Formate PDF, PostScript und Encapsulated PostScript erstellt werden und die beim macOS verbreitete Grafikschicht Quartz sowie unixtypische X Window System und Xfig angesprochen werden.

### Grundlegende Funktionen

Der Funktionsumfang einer R-Installation umfasst die Verwaltung von Dateien inklusive Herunterladen, Entpacken und Einlesen. Des Weiteren sind Funktionen zur Erstellung, Prüfung und Umwandlung von Datenstrukturen enthalten. Es gibt zahlreiche Funktionen zum Datenmanagement, unter Verwendung regulärer Ausdrücke oder printf zur Bearbeitung und Formatierung von Zeichenketten. Schleifen, bedingte Anweisungen und Verzweigungen sind enthalten sowie Funktionen der apply- und MapReduce-Familien (Funktionen höherer Ordnung), die alternativ genutzt werden können.
Zahlreiche Funktionen der deskriptiven Statistik sind implementiert und einige Analysefunktionen. Dies umfasst lineare und generalisierte lineare Modelle sowie die Varianzanalyse. Im Bereich Zeitreihenanalyse zählen dazu ARMA-Modelle, Interpolations- und Glättungsverfahren (etwa exponentielle Glättung, Kalman-Filter und Fourier-Transformation) sowie Dekomposition. Auch Hauptkomponenten- und Faktorenanalyse, die multidimensionale Skalierung und Verfahren der Clusteranalyse (hierarchisch sowie K-Means) sind aufzuzählen. Einige statistische Tests und Wahrscheinlichkeitsverteilungen mit Dichte, Verteilungsfunktion, Quantilsfunktion und Zufallszahlen gehören zum Standardumfang. Mehrere mathematische Funktionen zählen ebenfalls dazu, etwa spezielle Funktionen, trigonometrische Funktionen, Mengenoperationen, Matrixoperationen und Optimierungsalgorithmen.
Zusätzlich befinden sich Beispieldatensätze in R. Es existieren zahlreiche Funktionen für die Erstellung von Grafiken und ergänzenden grafischen Elementen inklusive LaTeX-ähnlicher Ausdrücke für mathematische Beschriftungssymbole. R nutzt das Hexadezimalsystem zur Repräsentation von Farben und beinhaltet 657 bereits in Worten spezifizierte Farben.
Hinzu kommen Funktionen zum Abruf von Metadaten, zur Paketverwaltung, für Debugging und Profiling sowie zur Veränderung von Einstellungen.
Um R als Skriptsprache für automatisierte Analysen zu verwenden, kann R-Code in eine Textdatei geschrieben und auf Windows entweder mit Rscript <Dateiname> oder R CMD BATCH <Dateiname> als Anweisung in einer Stapelverarbeitungsdatei ausgeführt werden. Auf unixoiden Systemen kann R-Code mit chmod ausführbar gemacht werden, und falls Rscript installiert ist, kann der Code wie jedes andere Skript ausgeführt werden. Somit können wiederkehrende Aufgaben mit Hilfe der Windows-Aufgabenplanung oder durch Cron erstellt werden. Untenstehendes Programm schreibt "Hello World!" auf die Kommandozeile (siehe auch Hallo-Welt-Programm); die erste Zeile des Programms ist die sogenannte Shebang-Zeile:
In R gibt es einen Bytecode-Compiler und die Grundinstallation von R enthält den Befehl system, womit Befehle an das Betriebssystem übergeben werden. Somit können beliebige, bereits bestehende Programme und Skripte mit Übergabe von Kommandozeilenparametern gestartet und der Rückgabewert in einer Variable gespeichert werden. Ebenfalls sind die Befehle .C und .Fortran vorhanden, um bereits kompilierte Programme in C und Fortran einzubinden. Auf diese Weise werden viele rechenintensive Subroutinen in besser geeignete Programmiersprachen ausgelagert, während die statistischen Methoden in R implementiert sind. So können Statistiker, die in R ihre Daten auswerten, rasch neue Methoden entwickeln, während Programmierer diese später bei Bedarf optimieren.

## Pakete

Die Standardbibliothek von R besteht aus 29 Paketen (Programmbibliotheken), in denen Funktionen zu ähnlichen Themen gebündelt sind. Diese Pakete sind in den herunterladbaren Distributionen von R enthalten. Die wichtigsten 14 Pakete mit den obigen Funktionen sind bei jedem Programmstart geladen; sie werden zusammen mit R selbst aktualisiert. Die weiteren 15 Pakete werden empfohlen.
Der Funktionsumfang kann durch eine Vielzahl von zusätzlichen Paketen erweitert und an spezifische statistische Problemstellungen aus diversen Anwendungsbereichen angepasst werden. Viele Pakete können dabei direkt aus einer über die R-Konsole abrufbaren Liste ausgewählt und automatisch installiert werden. Zentrales Archiv für diese Pakete ist das Comprehensive R Archive Network (CRAN) mit Haupt-Server an der Wirtschaftsuniversität Wien und zahlreichen Spiegelservern. Bioconductor ist eine weitere Sammlung von R-Paketen mit Erweiterungen aus der Bioinformatik, insbesondere der Analyse von Genexpressionsdaten. Es gibt über 10000 Pakete auf CRAN und 1294 Pakete auf Bioconductor.
Unter der Rubrik Task Views enthält CRAN eine Liste von 33 Themengebieten für welche eine kommentierte Beschreibung der für das Themengebiet relevanten Pakete vorhanden ist. Dies sind bayessche Statistik, Chemometrik und Computerphysik, klinische Studien, Clusteranalyse, Differentialgleichungen, Wahrscheinlichkeitsverteilungen, Ökonometrie, mathematische Beschreibung im Umweltbereich, Statistische Versuchsplanung, Finanzen, Genetik, Grafiken, Hochleistungsrechnen und Parallelrechnen, maschinelles Lernen, bildgebende Verfahren in der Medizin, Metaanalyse, multivariate Verfahren, Computerlinguistik, numerische Mathematik, amtliche Statistik und Befragung, Optimierung, Pharmakokinetik, Phylogenese, Psychometrie, reproduzierbare Forschung, robuste Schätzverfahren, Sozialwissenschaften, Geostatistik, Geostatistik mit Berücksichtigung der Zeit, Ereigniszeitanalyse, Zeitreihenanalyse, Webservices und -technologien sowie probabilistische graphische Modelle. Im Folgenden wird ein Überblick auf wichtige Pakete gegeben, die R mit anderer Software verknüpfen oder häufig heruntergeladen wurden.

### Schnittstellen
#### … zu anderer Software und deren Dateiformaten

Das Paket foreign erlaubt es, Datensätze aus den anderen Statistikprogrammen SPSS, SAS (zum Teil), Stata, SYSTAT, Minitab, Epi Info, GNU Octave sowie Weka einzulesen, zu analysieren und in den jeweiligen Formaten zu speichern. translateSPSS2R unterstützt die Übersetzung von SPSS-Code nach R. sas7bdat ermöglicht das Einlesen von SAS-Dateien, R.matlab das von Matlab-Dateien. Zudem kann Matlab dadurch über R gesteuert werden. Ähnliches bietet RcppOctave zusätzlich für GNU Octave. Software für Maschinelles Lernen wie Weka und H2O können durch RWeka sowie h2o eingebunden werden. Die Bibliotheken TensorFlow (tensorflow) und Caffe (caffeR) für Deep Learning können mit R genutzt werden. Die Programme OpenBUGS (R2OpenBUGS), Stan (rstan) und JAGS (rjags) für Bayessche Statistik sowie Gurobi (gurobi) für mathematische Optimierung lassen sich über Pakete einbinden. Mit hexView können unter anderem EViews-Dateien eingelesen werden. Mit readxl können Microsoft-Excel-Dateien eingelesen werden, mit gnumeric OpenDocuments. Im Bereich der Auszeichnungssprachen für Datenserialisierung gibt es für XML-Dateien das Paket XML und yaml für YAML-Dateien. Auf das Chemistry Development Kit (Chemoinformatik), welches die Chemical Markup Language verwendet, kann mit rcdk zugegriffen werden. Für wissenschaftliche Daten können die Formate NetCDF und das Hierarchical Data Format mit RNetCDF sowie rhdf5 eingelesen werden. Astronomische Daten aus dem Flexible Image Transport System können ebenfalls in R geladen werden – mit FITSio. R-ArcGIS, geosapi,RSAGA, RQGIS und rgrass7 bieten Schnittstellen zu den Geoinformationssystemen ArcGIS, GeoServer, SAGA, QGIS und GRASS GIS, aRT zu TerraLib und rgdal zur Geospatial Data Abstraction Library für Rasterdaten. Shapefiles und Dateien der Keyhole Markup Language von Google Earth können mit maptools eingelesen werden. Mit tuneR können MP3-Dateien und Wavesounds in R eingelesen werden, audio ermöglicht die akustische Wiedergabe von diesen Audiodateien mit Hilfe des Mediaplayers.

#### … zu Datenbanken

Mehrere Pakete liefern Schnittstellen um auf Datenbanken zuzugreifen. Dazu zählen im Allgemeinen das Front-End DBI zusammen mit RODBC (ODBC) oder Java-basiert RJDBC (JDBC).
Für relationale Datenbanken gibt es zudem RMySQL (MySQL und MariaDB), RSQLite (SQLite) und teradataR (Teradata Aster).
Bezüglich objekt-relationalen Datenbanken gibt es die Pakete RSQLServer (für Microsoft SQL Server), ibmdbr (Db2), RPostgreSQL (PostgreSQL) und ROracle für Oracle-Datenbanken. Das Paket r-exasol ermöglicht die Anbindung an die relationale In-Memory-Datenbank von EXASOL, MonetDB.R an die spaltenorientierte Datenbank MonetDB. Für NoSQL- und Key-Value-Datenbanken gibt es RCassandra (Apache Cassandra) und rredis (Redis), RNeo4j für die Graphdatenbank Neo4j und RCouchDB, rfml sowie mongolite für die dokumentenorientierten Datenbanken CouchDB, MarkLogic beziehungsweise MongoDB.
SparkR bindet R in das Big-Data-Framework Apache Spark ein, welches auf In-Memory-Verarbeitung basiert und rkafka bezieht Nachrichtenprotokolle aus Apache Kafka. RImpala verwendet Apache Impala für schnelle interaktive SQL-Abfragen und elastic verwendet Elasticsearch. SQL-ähnliche Abfragen können mit sqldf innerhalb von R genutzt werden.

#### … zu anderen Programmiersprachen

Verschiedene Pakete bieten Schnittstellen zu anderen Programmiersprachen, die zur Performance-Optimierung und zur Erweiterung des Funktionsumfangs eingesetzt werden. Hauptsächlich wird dafür das Paket Rcpp verwendet, welches zum Beispiel die Verwendung von C++-Funktionen in externen Quellcode-Dateien oder in R selbst ermöglicht, wobei die Funktionen bei jedem Programm-Ablauf erneut kompiliert werden. rJava bietet eine Schnittstelle zu Java, rscala für Scala und rPython für Python. Der Kommandozeileninterpreter IPython (Jupyter) kann mit IRkernel genutzt werden. Mit rocker kann R im Rahmen von Docker in virtuellen Containern isoliert werden.

#### … zu Webservices

Mit rvest können Websites gescraped werden um deren HTML-Inhalte in R nutzbar zu machen. Die Funktionsweise ist Beautiful Soup von Python nachempfunden. Verschiedene weitere Pakete sind direkt auf bestimmte Websites zugeschnitten und bieten dort mehr Komfort. Das Paket twitteR erlaubt einen Zugriff auf Beiträge bei Twitter, Rfacebook greift auf die Facebook API zu. Mit googleVis können die Google-Charts genutzt werden, mit RGoogleAnalytics Google Analytics. Eine Schnittstelle zur OpenStreetMap bietet osmar. Dieser Wikipedia-Artikel und weitere Seiten verwandter Projekte lassen sich als HTML oder Wikitext mit WikipediR in R laden.
Mit RSelenium kann der Selenium-WebDriver eingebunden werden und somit von R aus ein Webbrowser gesteuert werden. Das Paket mailR ermöglicht das Senden von E-Mails aus R heraus.

### Berichtserstellung

Für Reporting-Zwecke lässt sich R-Code in LaTeX (knitr, Sweave) oder HTML beziehungsweise Markdown (knitr, rmarkdown) einbinden. knitr bereitet R-Code überdies für die weiteren Auszeichnungssprachen AsciiDoc und reStructuredText auf und bietet eine Anbindung an Pandoc. xtable erlaubt es Tabellen mit R-Daten zu gestalten und liefert deren LaTeX- sowie HTML-Code. texreg und stargazer stellen die Ergebnisse verschiedener Modelle in einer Tabelle dar und unterstützen unterschiedliche Ausgabeformate (Text, HTML, LaTeX). Mit dem Paket ReporteRs lassen sich unter anderem Vektorgrafiken erstellen, die auch nachträglich in Microsoft Word und PowerPoint bearbeitet werden können. tikzDevice erstellt den Code der oft in LaTeX verwendeten PGF/TikZ-Grafiken. jsonlite ermöglicht es, Data-Frames als JSON-Objekte zu speichern.

### Grafikerstellung

Das Paket lattice setzt die Idee der Trellis-Grafiken zur Visualisierung von multivariaten Daten um. ggplot2 ermöglicht es ebenfalls, durch größere Abstraktion schneller komplexe Grafiken zu erstellen. Dieses Paket ist eine Implementierung von Leland Wilkinsons Grammar of Graphics. Mit ggvis(basieren auf ggplot2) und plotly und shiny lassen sich interaktive, web-basierte Grafiken erstellen. rgl eignet sich für interaktive dreidimensionale Grafiken. Bei der Grafikerstellung unterstützen zudem die Pakete scales (Zuordnung von Daten auf ästhetische Elemente) sowie labeling (weitere Achsenbeschriftungs-Optionen). Die Graph Modelling Language und ihre Anwendung in Grafiken zur Netzwerkanalyse wird durch igraph implementiert. Auch auf das Graphviz kann zur Graph-Visualisierung mit Rgraphviz zugegriffen werden. Turtle-Grafiken können mit TurtleGraphics umgesetzt werden. Ebenfalls der Veranschaulichung dienen animierte Konzepte aus der Statistik im Paket animation, das außerdem Funktionen liefert, um eigene Animationen in R umzusetzen.
Mit dem Paket munsell kann das Munsell-Farbsystem genutzt werden, mit Hilfe von colorspace lassen sich Farbzuordnungen innerhalb einer großen Zahl an Farbsystemen realisieren. Der RColorBrewer kann eine Farbpalette nach benutzerdefinierten Vorgaben erzeugen, etwa zur Kolorierung von Landkarten.

### Datenmanagement

Im Bereich Datenmanagement vereinfacht plyr das Bearbeiten von Listen, dplyr das von Data-Frames, tidyr das Transformieren von Data-Frames (Wide-Format und Long-Format), stringi und stringr die Bearbeitung von Zeichenketten, lubridate das Editieren von Datums- und Zeitangaben und zoo den Umgang mit Zeitreihen. data.table ist eine effizientere Version mit erweitertem Funktionsumfang anstelle von Data-Frames. Ein Message Passing Interface für den Nachrichtenaustausch bei parallelen Berechnungen auf verteilten Computersystemen kann entweder per Master/Slave (Rmpi) oder per SPMD (pbdMPI) umgesetzt werden. Die CUDA-Technik von Nvidia kann mit Hilfe von gputools realisiert werden. Durch digest lassen sich verschiedene kryptologische Hashfunktionen auf R-Objekte anwenden.

### Entwicklerwerkzeuge

Mit devtools können eigene Pakete erstellt, installiert und überprüft werden. roxygen2 unterstützt ihre Dokumentierung. RUnit (xUnit) und testthat ermöglichen automatisierte Softwaretests. Das Paket sos ermöglicht es, R und R-Pakete nach Funktionen zu durchsuchen. installr aktualisiert R und andere Software (unter Windows). Mit dem Pipe-Operator (%>%) aus dem Paket magrittr lassen sich R-Funktionen sequenziell ausführen anstatt sie ineinander zu verschachteln um bessere Code-Lesbarkeit zu erzielen.

## Benutzeroberfläche

Die R-Installation beinhaltet RGui, eine Oberfläche, in der R in einer Art Kommandozeilenumgebung läuft. Ein paar Menübefehle ermöglichen Zugriff auf Hilfe, Paketverwaltung, Operationen bezüglich der Arbeitsumgebung sowie die Möglichkeit Skriptdateien zu erstellen und auszuführen.

### Externe Benutzeroberflächen

Mehrere grafische Benutzeroberflächen und integrierte Entwicklungsumgebungen bieten weitere Möglichkeiten bei der Arbeit mit R. Dazu zählen RStudio (auch als Version für Linux-Server erhältlich), Visual Studio Code von Microsoft, die Java-basierte Benutzeroberfläche JGR (Jaguar, Java GUI for R), RKWard, R AnalyticFlow, die Mathematik-Software Cantor, die cloud-basierte Number Analytics für Einsteiger sowie StatET (Eclipse) und der darauf aufbauende Architect. Sie zeichnen sich im Wesentlichen durch Autovervollständigung, automatische Einrückungen, Syntaxhervorhebung, Code-Faltung, integrierte Hilfe, Informationen zu Objekten in der Arbeitsumgebung und Daten-Viewer oder -Editoren aus. Erweiterte Entwicklungsoptionen wie Versionsverwaltung mit Git oder grafisches Debugging sind teilweise enthalten.

### Benutzeroberflächen in Paketen

Zwei umfangreiche grafische Benutzeroberflächen, die als Pakete in R bereitgestellt werden, sind der R-Commander (Paketname: Rcmdr) und relax. Bei beiden lassen sich einige wichtige Prozeduren der explorativen und analytischen Statistik über ein Menüsystem aufrufen. Ebenso können über das Menü Standardgrafiken erzeugt werden. Der R-Commander ist betriebssystemunabhängig geschrieben und erleichtert das Datenmanagement sowie das Schreiben von Skripten. relax ist speziell darauf konzipiert die Datenanalyse und Dokumentation der Ergebnisse im Stil des Literate programming in ein Dokument zu integrieren (vergleiche Sweave).
Des Weiteren gibt es das Paket rattle, welches als grafische Benutzeroberfläche einen Einstieg in Data-Mining-Projekte bietet. RQDA ist eine grafische Benutzeroberfläche für qualitative Datenanalyse, statnet für Netzwerkanalyse. Der Deducer eignet sich vor allem zum Bearbeiten von Data-Frames. Ein weiteres Paket ist pmg.
Grafische Benutzeroberflächen wie diese lassen sich mit Tk, GTK (mit Hilfe des Pakets RGtk2) oder Qt (qtbase) erstellen.

### Editoren

Die Editoren Notepad++, Bluefish, CodeMirror, Emacs / Aquamacs, Geany, gedit, jEdit, Kate, SciTE, Smultron, Sublime Text, TextMate, TextPad, Tinn, Vim, WinEdt und TextWrangler sowie SubEthaEdit unterstützen R entweder nativ oder mithilfe entsprechender Erweiterungen.

### Textverarbeitungswerkzeuge

Die Textverarbeitungssysteme GNU TeXmacs, LyX (mit Sweave oder knitr) und ShareLaTeX (knitr) binden R ein, das Software-Dokumentationswerkzeug Natural Docs und Travis CI für kontinuierliche Integration ebenfalls. Die Notiz-Software Org-mode und Zim nutzen R für Grafiken und ermöglichen eine interaktive Bearbeitung.

## Einbindungen
### Alternative Open-Source-Interpreter

Mehrere alternative Interpreter wurden entwickelt, etwa um R leistungsfähiger zu machen und besser in bestehende Software zu integrieren. pqR ist ein schnellerer R-Interpreter und eine Abspaltung von GNU R. pqr eignet sich für parallele Programmierung, da automatisch mehrere Prozessorkerne genutzt werden können. Der Interpreter ist in C geschrieben und nur unter Linux lauffähig; viele R (CRAN) Pakete laufen auch unter pqR, aber nicht alle.
Der Interpreter Renjin basiert auf der Java Virtual Machine und zeichnet sich durch implizite Nebenläufigkeit, Just-in-time-Kompilierung von Bytecode und eine bessere Implementierung von Java aus. Garbage Collection findet parallelisiert statt. Es ist möglich, Code bei Platform-as-a-Service-Providern wie Google App Engine, Amazon Beanstalk oder Salesforce Heroku abzulegen. Renjin wird durch das Unternehmen BeDataDriven unterstützt.
FastR ist ein javabasierter Interpreter, der auf den Truffle-Interpreter und den Graal-Byte-Compiler aufgesetzt wurde. Er ist in Zusammenarbeit der Oracle Labs mit der Purdue University und der Universität Linz entstanden und ermöglicht Nebenläufigkeit.
Riposte ist ein in C++ neu geschriebener und schnellerer Interpreter unterstützt von Tableau für Linux, der ebenfalls Just-in-time-Kompilierung von Bitecode nutzt. Die Lazy Evaluation von R wurde dabei überarbeitet, sodass weniger interne Variablen in Zwischenschritten erstellt werden. Riposte ermöglicht implizite Nebenläufigkeit mit mehreren Kernen und verwendet Streaming SIMD Extensions sowie Advanced Vector Extensions von Prozessoren.
Ein weiterer Interpreter ist CXXR von der University of Kent mit Unterstützung von Google, der als in C++ geschriebene Abspaltung Modifikationen am R-Interpreter vornimmt. Anlass des Entwickelns war das Fehlen einer S-PLUS-Funktion in R, die es ermöglicht den Code zu betrachten, der zur Erstellung eines bestimmten Objektes geführt hat. Außerdem wurde die Dokumentation verbessert.

### Einbindung in Business-Plattformen

Revolution Analytics hat die Analyse-Plattform Revolution R erschaffen, die R-Funktionen zusammen mit selbst entwickelten Komponenten anbietet. Im April 2015 schloss Microsoft den Kauf von Revolution Analytics ab. Außer der Windows-Version läuft Revolution R Enterprise jetzt als Microsoft R Server; dies betrifft portierte Versionen für Hadoop (Hortonworks, Cloudera, MapR) für die Teradata-Datenbank, für Red Hat Linux, den SUSE Linux Enterprise Server, Apache Spark, die Cloud-Computing-Plattform Microsoft Azure und den SQL-Server. Der Microsoft R Server besteht aus der kostenlosen Komponente Microsoft R Open sowie Distributed R (Normalisierung, Portierung), ScaleR (Interpreter mit Big-Data-R-Funktionen), ConnectR (Schnittstellen), DevelopR (Entwicklungsumgebung) und DeployR für Web-Services. Microsoft R Open führt erste Performance-Verbesserungen ein durch die Ersetzung von BLAS und LAPACK mit der Intel Math Kernel Library. ScaleR ist ein optimierter Interpreter und beinhaltet zahlreiche R-Funktionen, die besonders für Big-Data-Analysen geeignet sind und mit dem Präfix Rx beginnen. Dazu zählt das Einlesen von Daten in Datenblöcken, eine Ausführung von Skripten im Rechnerverbund statt nur lokal und statistische Analysefunktionen, die in C++ neu geschrieben wurden und parallelisiert angewandt werden können. ConnectR stellt Schnittstellen zu anderen Dateiformaten und Datenbanken (Textdateien, SQL-Server, ODBC-Datenbanken, SAS, SPSS, Teradata) für das eigene .xdf-Datenformat bereit. .xdf braucht keinen Parser, ist circa fünfmal kleiner als eine .csv-Datei und Daten werden dabei nur dann eingelesen, wenn sie benötigt werden. Durch die Speicherung auf der Festplatte gilt die Begrenzung durch den internen Speicher nicht mehr. DevelopR liefert eine schnelle interaktive Entwicklungsumgebung basierend auf Visual Studio beziehungsweise RStudio für Linux-User. DeployR bringt eine Schnittstelle für Web-Applikationen zum R-Code, eingebettet mit Werkzeugen zur Authentifizierung, Informationssicherheit, Monitoring, Ressourcenmanagement, einem Sitzungsmanager sowie einer REST-API für JSON und XML. Web-Applikationen können als Client in Java, JavaScript/Node.js und für das .Net-Framework geschrieben werden. Die Webservices werden über einen Apache-Tomcat-Server verwaltet, die Datenbank mit Hilfe von MongoDB. Seit 2016 ist R in den Microsoft-SQL-Server integriert. Die Analysesoftware Predixion Insight von Predixion Software als Teil von Microsoft Business Intelligence verband R zuvor mit dem SQL-Server und anderen Big-Data-Technologien.
TIBCO Spotfire Analytics hat mit TIBCO Enterprise Runtime for R (TERR) eine Analyse-Plattform, die einen in C++ neu geschriebenen R-Interpreter beinhaltet. Jeder Datentyp wird dabei als abstrakte C++-Klasse dargestellt; zudem ist eine native C++-Schnittstelle ein Bestandteil. TIBCO stellt außerdem den kommerziellen Dialekt von S (S-PLUS) bereit und mit StreamBase eine Plattform für Complex Event Processing mit R-Integration.
Oracle verkündete im Oktober 2011 die Big Data Appliance, die R, Apache Hadoop, Oracle Linux, und mit Hardware von Exadata eine NoSQL-Datenbank verknüpft. Wichtigster R-Bestandteil ist dabei Oracle R Enterprise (ORE), wobei R-Objekte direkt in der Oracle-Datenbank analysiert werden, was die Effizienz erhöht. Es findet eine implizite Übersetzung von R nach SQL statt. ORE und Oracle Data Mining (ODM), welches eigene R-Funktionen für Data-Mining enthält, bilden die Oracle Advanced Analytics Option.
IBM bietet eine Integration von R in die eigene InfoSphere BigInsights, welche Hadoop as a Service inklusive HBase und Hive beinhaltet und an einige Datenbanken und Webservices angebunden werden kann. Die R-Komponente nennt sich Big R. Auch mit der Spectrum Symphony sind mittels R Analysen möglich. Das Tochterunternehmen Netezza bindet R in das Hauptprodukt, die In-Memory-Datenbank TwinFin für schnelle Analysen großer Datenmengen ein.
SAP ermöglicht eine R-Anbindung über die In-Memory-Datenbank HANA. Zudem wurden beim Tochterunternehmen Sybase mit Hilfe von R die Analysemöglichkeiten für Börsendaten in der Software RAP verbessert.
Hewlett-Packard entwickelte Distributed R, welches R-Funktionen für Analysen auf großen Datenmengen auf Grundlage von verteiltem Rechnen implementiert. Distributed R ist zusammen mit der Vertica-Datenbank Bestandteil der Software HP Haven Predictive Analytics.
MicroStrategy ermöglicht eine Integration von R mit dem R Integration Pack, Information Builders mit WebFOCUS. In die Dundas BI von Dundas Data Visualization kann R eingebunden werden, ebenso in Tableau und QlikView. Zementis modelliert mit der Predictive Model Markup Language Data-Mining-Fragestellungen einheitlich, führt sie in R aus und überführt sie in die eigenen Produkte ADAPA und UPPI. Techila integriert R zur Anwendungsprogrammierung mit verteiltem Rechnen. Innerhalb des icCube-Servers kann R für Online Analytical Processing verwendet werden. Mit R-Integration ermöglicht MonetDB die Einbindung von R.

### Einbindung in Software

Die meisten wichtigen Software-Pakete, bei denen Statistik oder Mathematik einen Schwerpunkt bildet, stellen Schnittstellen zu R bereit oder bieten eine Integration. Dies sind SAS und JMP, SPSS, MATLAB, Maple, Sage, Mathematica, Statistica, gretl, Showgun, RapidMiner, KNIME sowie Mondrian, ASReml und das WPS. Für Excel gibt es das R-Plug-in RExcel.
Außerdem bieten das Geoinformationssystem ArcGIS von ESRI, AFNI (Neurowissenschaften), Bioclipse (Biowissenschaften), GenGIS (Bioinformatik), Bio7 (Ökologische Modellierung und Bildanalyse), INVEP (Insolvenzverwaltung) sowie Compass von Cytel (für klinische Studien) eine Einbindung von R.

### Einbindung in andere Programmiersprachen und Programmbibliotheken

Auf die Funktionalität von R können zahlreiche Skriptsprachen zugreifen. Dazu zählen Python (rpy2), Julia (unter anderem RCall), Perl (Statistics::R), Ruby (rsruby) und F# (RProvider).
Mit PL/R kann R innerhalb einer PostgreSQL-Datenbank zur serverseitigen Programmierung eingesetzt werden, was beispielsweise die Datenbank Rasdaman für Array- beziehungsweise Rasterdaten tut.
SWIG macht in C und C++ geschriebene Module für R verfügbar. MicroAPL bindet mit APLX R in APL ein. Die Python-Werkzeuge zur Paketverwaltung (Conda von Continuum Analytics) und Automatisierung (Dexy, mit dem R Filter) nutzen R.

### Einbindung als Skriptsprache in Serverumgebungen

rApache ermöglicht die Entwicklung von Webanwendungen für R, die auf dem Apache HTTP Server basieren (Server Side Scripting). Zu weiteren Webangeboten zählen Rserve als binärer Server und Rwui für Java Webserver. R kann als Skriptsprache im LabKey-Server (für Biomedizin) verwendet werden.

## Unterstützung durch Stiftungen
### R Foundation

Die gemeinnützige R Foundation for Statistical Computing besitzt und verwaltet das Urheberrecht von R und die Dokumentation. Ein Ziel ist die Förderung der Verbreitung von R als Open-Source-Sprache. Zudem dient ihre Rolle der Kommunikation mit der Presse und an R interessierten Organisationen. Die R Foundation finanziert sich durch Mitgliedsbeiträge und Spenden.
Die Zeitschrift The R Journal wird zweimal jährlich im Juni und Dezember von der R Foundation frei zugänglich als PDF-Datei herausgegeben. Sie informiert über Neuigkeiten in der R-Welt, Veränderungen in neuen R-Versionen, neue Pakete sowie Anwendertipps und Tutorials. Vor der ersten Ausgabe im Juni 2009 gab es die R News.
Jährlich findet die Konferenz useR! statt, die sich an R-Nutzer richtet. Die erste dieser Veranstaltungen war useR! 2004 im Mai 2004 in Wien. Nachdem 2005 ausgelassen wurde, fand die Konferenz jährlich an verschiedenen Orten statt:

#### useR!-Konferenzen

| Jahr | Stadt | Land | Teilnehmer | Website |
| 2004 | Wien | Osterreich Österreich | 194 | useR! 2004 |
| 2006 | Wien | Osterreich Österreich | 334 | useR! 2006 |
| 2007 | Ames, Iowa | Vereinigte Staaten Vereinigte Staaten | unb. | useR! 2007 |
| 2008 | Dortmund | Deutschland Deutschland | 387 | useR! 2008 |
| 2009 | Rennes | Frankreich Frankreich | 463 | useR! 2009 |
| 2010 | Gaithersburg, Maryland | Vereinigte Staaten Vereinigte Staaten | 465 | useR! 2010 |
| 2011 | Coventry | Vereinigtes Konigreich Vereinigtes Königreich | 430 | useR! 2011 |
| 2012 | Nashville, Tennessee | Vereinigte Staaten Vereinigte Staaten | 469 | useR! 2012 |
| 2013 | Albacete | Spanien Spanien | 328 | useR! 2013 |
| 2014 | Los Angeles, Kalifornien | Vereinigte Staaten Vereinigte Staaten | 604 | useR! 2014 |
| 2015 | Aalborg | Danemark Dänemark | 660 | useR! 2015 |
| 2016 | Stanford, Kalifornien | Vereinigte Staaten Vereinigte Staaten | 900 | useR! 2016 |
| 2017 | Brüssel | Belgien Belgien | 1.200 | useR! 2017 |
| 2018 | Brisbane | Australien Australien | fast 600 | useR! 2018 |
| 2019 | Toulouse | Frankreich Frankreich | 1.178 | useR! 2019 |
| 2020 | St. Louis (online) | Vereinigte Staaten Vereinigte Staaten | | useR! 2020 |
| 2021 | Zürich (online) | Schweiz Schweiz | | useR! 2021 |
| 2022 | Nashville, Tennessee (online) | Vereinigte Staaten Vereinigte Staaten | | useR! 2022 |
Neben der Organisation dieser und weiterer Konferenzen stellt die R Foundation bei entsprechenden Anlässen R vor und fördert Forschungsprojekte mit Bezug zu R.
Mailinglisten wurden eingerichtet und sind für Anwender mit Fragen zu R geöffnet. Antworten auf Fragen erfolgen häufig zügig, manchmal von Mitgliedern des R Core Teams.

### R Consortium

Mehrere größere Unternehmen, die R nutzen oder ihr Geschäftsmodell darauf stützen, schlossen sich 2015 zum R Consortium als Teil der Linux Foundation zusammen. Ziel ist insbesondere die Verbesserung der geschäftlichen Infrastruktur, um R im Unternehmensumfeld komfortabler einsetzen zu können. Zu den Gründungsmitgliedern des R Consortium zählen neben der R Foundation die Unternehmen Microsoft, RStudio, Tibco, alteryx, Google, Hewlett-Packard, Ketchum Trading, Mango Solutions und Oracle. Die Gordon and Betty Moore Foundation sowie weitere Unternehmen wie IBM und ESRI traten später bei. Um R besser in Unternehmensprozesse einbinden zu können, sollen gezielt Projekte gefördert werden. Das erste geförderte Projekt ist R-Hub, womit der Prozess der Erstellung und des Testens von R-Paketen vereinfacht werden soll.

## Rezeption

R ist das umfassendste Werkzeug für statistische Analysen sowohl bezüglich der bereits implementierten Methoden als auch bezogen auf das Potential, das die Sprache für weitere statistische Fragestellungen bietet. R wurde von Statistikern für statistische Fragestellungen entworfen und geht somit direkt auf die Bedürfnisse ein, die für solche Zwecke benötigt werden (wenige Zeilen Code sind notwendig für komplexe statistische Probleme). Der Code der statistischen Methoden ist offen einsehbar und wurde schon von vielen studierten Statistikern mit Erfahrung in der Anwendung gesichtet und verbessert; zudem ist R von der Food and Drug Administration für medizinische Zwecke validiert. R steht unter einer freien Lizenz und ist Open Source und kann somit leicht auf individuelle Vorlieben angepasst werden und durch eigene Methoden erweitert werden. Außerdem kostet R keine Lizenzgebühr und kann auf verschiedenen Betriebssystemen genutzt werden. Die Grafiken können sehr flexibel an benutzerdefinierte Bedürfnisse angepasst werden (zum Beispiel unter Verwendung mathematischer Symbole). Auch die Datenstrukturen erlauben Flexibilität. Der Funktionsumfang von R wird durch zahlreiche Pakete stetig erweitert; aufgrund des unkomplizierten Vorgehens werden viele neue statistische Methoden als Erstes in R implementiert. Zahlreiche Funktionen und Pakete verknüpfen R mit anderer Software und ermöglichen somit das Importieren und Exportieren vieler Dateiformate. Auch andere Programmiersprachen und Datenbanken können eingebunden werden. Für R gibt es mittlerweile umfassende Literatur und Dokumentationen. R hat aktive Anwendergruppen um sich gegenseitig bei Problemen zu helfen sowie große Präsenz bei Portalen wie Stack Overflow und GitHub. Beschäftigte mit guten R-Kenntnissen, die an der Dice Tech Salary Survey (2013) teilnahmen, hatten ein höheres Durchschnittseinkommen als Beschäftigte mit anderen IT-Fertigkeiten.
Eine vollständige grafische Benutzeroberfläche, wie sie in anderen Statistikprogrammen existiert, ist in R nicht vorhanden. Die Sprache erfordert somit einige Programmierfertigkeiten, um sie nutzen zu können, was erste Ergebnisse langsamer entstehen lässt. Hinzu kommt, dass R für eine sinnvolle Nutzung ein größeres Maß an statistischem Verständnis erfordert. Die Dokumentation der R-Befehle ist teilweise kurz und/oder uneinheitlich. Auch folgen die Bezeichnungen von Funktionen und Argumenten in der Sprache selbst (besonders in Paketen) nur wenigen Konventionen. Eine ausgiebige inhaltliche Qualitätssicherung von neuen Paketen findet nicht statt. Bei Fehlfunktionen kann niemand zur Rechenschaft gezogen werden oder ist für eine schnelle Verbesserung verantwortlich. Da R auf die Bedürfnisse von Statistikern zielt und viele Methoden von ihnen (und nicht von Programmierern) implementiert werden, spielt Performance-Optimierung bei R nur eine nachgeordnete Rolle, weshalb andere Programmiersprachen oft schneller sind und manchmal zur Optimierung herangezogen werden. R fußt auf Programmiersprachen und Konzepten, die mehrere Jahrzehnte zurückliegen. Die Entwickler von Julia haben sich zum Ziel gesetzt, die Sprache ähnlich gut und einfach zur Datenanalyse einsetzen zu können wie R und möchten die Sprache zudem mit hoher Geschwindigkeit ausstatten.

## Beispiel

Als einfaches Beispiel wird der Korrelationskoeffizient zweier Datenreihen berechnet:
Das Ergebnis lautet 0.9295038.
Als weitergehende Analyse kann eine lineare Regression durchgeführt werden. Dies kann in R durch die Funktion lm ausgeführt werden, wobei die abhängige Variable von den unabhängigen Variablen durch die Tilde getrennt wird. Die Funktion summary gibt die Koeffizienten der Regression und weitere Statistiken hierzu aus:
Diagramme lassen sich einfach erzeugen: