# R (programming language)

R is a programming language for statistical computing and data visualization. It has been adopted in the fields of data mining, bioinformatics and data analysis.
The core R language is augmented by a large number of extension packages, containing reusable code, documentation, and sample data.
R software is open-source and free software. It is licensed by the GNU Project and available under the GNU General Public License. It is written primarily in C, Fortran, and R itself. Precompiled executables are provided for various operating systems.
As an interpreted language, R has a native command line interface. Moreover, multiple third-party graphical user interfaces are available, such as RStudio—an integrated development environment—and Jupyter—a notebook interface.

## History

R was started by professors Ross Ihaka and Robert Gentleman as a programming language to teach introductory statistics at the University of Auckland. The language was inspired by the S programming language, with most S programs able to run unaltered in R. The language was also inspired by Scheme's lexical scoping, allowing for local variables.
The name of the language, R, comes from being both an S language successor as well as the shared first letter of the authors, Ross and Robert. In August 1993, Ihaka and Gentleman posted a binary of R on StatLib — a data archive website. At the same time, they announced the posting on the s-news mailing list. On 5 December 1997, R became a GNU project when version 0.60 was released. On 29 February 2000, the 1.0 version was released.

## Packages

R packages are collections of functions, documentation, and data that expand R. For example, packages add report features such as RMarkdown, Quarto, knitr and Sweave. Packages also add the capability to implement various statistical techniques such as linear, generalized linear and nonlinear modeling, classical statistical tests, spatial analysis, time-series analysis, and clustering. Easy package installation and use have contributed to the language's adoption in data science.
Base packages are immediately available when starting R and provide the necessary syntax and commands for programming, computing, graphics production, basic arithmetic, and statistical functionality.
The Comprehensive R Archive Network (CRAN) was founded in 1997 by Kurt Hornik and Friedrich Leisch to host R's source code, executable files, documentation, and user-created packages. Its name and scope mimic the Comprehensive TeX Archive Network and the Comprehensive Perl Archive Network. CRAN originally had three mirrors and 12 contributed packages. As of 16 October 2024, it has 99 mirrors and 21,513 contributed packages. Packages are also available on repositories R-Forge, Omegahat, and GitHub.
The Task Views on the CRAN web site list packages in fields such as causal inference, finance, genetics, high-performance computing, machine learning, medical imaging, meta-analysis, social sciences, and spatial statistics.
The Bioconductor project provides packages for genomic data analysis, complementary DNA, microarray, and high-throughput sequencing methods.
The tidyverse package bundles several subsidiary packages that provide a common interface for tasks related to accessing and processing "tidy data", data contained in a two-dimensional table with a single row for each observation and a single column for each variable.
Installing a package occurs only once. For example, to install the tidyverse package:
To load the functions, data, and documentation of a package, one executes the library function. To load tidyverse:

## Interfaces

R comes installed with a command line console. Available for installation are various integrated development environments (IDE). IDEs for R include R.app (OSX/macOS only), Rattle GUI, R Commander, RKWard, RStudio, and Tinn-R.
General purpose IDEs that support R include Eclipse via the StatET plugin and Visual Studio via R Tools for Visual Studio.
Editors that support R include Emacs, Vim via the Nvim-R plugin, Kate, LyX via Sweave, WinEdt (website), and Jupyter (website).
Scripting languages that support R include Python (website), Perl (website), Ruby (source code), F# (website), and Julia (source code).
General purpose programming languages that support R include Java via the Rserve socket server, and .NET C# (website).
Statistical frameworks which use R in the background include Jamovi and JASP.

## Community

The R Core Team was founded in 1997 to maintain the R source code. The R Foundation for Statistical Computing was founded in April 2003 to provide financial support. The R Consortium is a Linux Foundation project to develop R infrastructure.
The R Journal is an open access, academic journal which features short to medium-length articles on the use and development of R. It includes articles on packages, programming tips, CRAN news, and foundation news.
The R community hosts many conferences and in-person meetups - see the community maintained GitHub list. These groups include:
* UseR!: an annual international R user conference (website)
* Directions in Statistical Computing (DSC) (website)
* R-Ladies: an organization to promote gender diversity in the R community (website)
* SatRdays: R-focused conferences held on Saturdays (website)
* R Conference (website)
* posit::conf (formerly known as rstudio::conf) (website)

## Implementations

The main R implementation is written primarily in C, Fortran, and R itself. Other implementations include:
* pretty quick R (pqR), by Radford M. Neal, attempts to improve memory management.
* Renjin is an implementation of R for the Java Virtual Machine.
* CXXR and Riposte are implementations of R written in C++.
* Oracle's FastR is an implementation of R, built on GraalVM.
* TIBCO Software, creator of S-PLUS, wrote TERR — an R implementation to integrate with Spotfire.
Microsoft R Open (MRO) was an R implementation. As of 30 June 2021, Microsoft started to phase out MRO in favor of the CRAN distribution.

## Commercial support

Although R is an open-source project, some companies provide commercial support:
* Oracle provides commercial support for the Big Data Appliance, which integrates R into its other products.
* IBM provides commercial support for in-Hadoop execution of R.

## Examples
### Hello, World!

"Hello, World!" program:

### Basic syntax

The following examples illustrate the basic syntax of the language and use of the command-line interface. (An expanded list of standard language features can be found in the R manual, "An Introduction to R".)
In R, the generally preferred assignment operator is an arrow made from two characters <-, although = can be used in some cases.

### Structure of a function

One of R's strengths is the ease of creating new functions. Objects in the function body remain local to the function, and any data type may be returned. In R, almost all functions and all user-defined functions are closures.
Create a function:
Usage output:
It is possible to define functions to be used as infix operators with the special syntax `%name%` where "name" is the function variable name:
Since version 4.1.0 functions can be written in a short notation, which is useful for passing anonymous functions to higher-order functions:

### Native pipe operator

In R version 4.1.0, a native pipe operator, |>, was introduced. This operator allows users to chain functions together one after another, instead of a nested function call.
Another alternative to nested functions, in contrast to using the pipe character, is using intermediate objects:
While the pipe operator can produce code that is easier to read, it has been advised to pipe together at most 10 to 15 lines and chunk code into sub-tasks which are saved into objects with meaningful names. Here is an example with fewer than 10 lines that some readers may still struggle to grasp without intermediate named steps:

### Object-oriented programming

The R language has native support for object-oriented programming. There are two native frameworks, the so-called S3 and S4 systems. The former, being more informal, supports single dispatch on the first argument and objects are assigned to a class by just setting a "class" attribute in each object. The latter is a Common Lisp Object System (CLOS)-like system of formal classes (also derived from S) and generic methods that supports multiple dispatch and multiple inheritance
In the example, summary is a generic function that dispatches to different methods depending on whether its argument is a numeric vector or a "factor":

### Modeling and plotting

The R language has built-in support for data modeling and graphics. The following example shows how R can generate and plot a linear model with residuals.
Output:

### Mandelbrot set

This Mandelbrot set example highlights the use of complex numbers. It models the first 20 iterations of the equation z = z$^2$ + c, where c represents different complex constants.
Install the package that provides the write.gif function beforehand:
R Source code:

## Version names

All R version releases from 2.14.0 onward have codenames that make reference to Peanuts comics and films.
In 2018, core R developer Peter Dalgaard presented a history of R releases since 1997. Some notable early releases before the named releases include:
* Version 1.0.0 released on 29 February 2000 (2000-02-29), a leap day
* Version 2.0.0 released on 4 October 2004 (2004-10-04), "which at least had a nice ring to it"
The idea of naming R version releases was inspired by the Debian and Ubuntu version naming system. Dalgaard also noted that another reason for the use of Peanuts references for R codenames is because, "everyone in statistics is a P-nut".
R release codenames :
| Version | Release date | Name | Peanuts reference |
| 4.4.2 | 2024-10-31 | Pile of Leaves | |
| 4.4.1 | 2024-06-14 | Race for Your Life | |
| 4.4.0 | 2024-04-24 | Puppy Cup | |
| 4.3.3 | 2024-02-29 | Angel Food Cake | |
| 4.3.2 | 2023-10-31 | Eye Holes | |
| 4.3.1 | 2023-06-16 | Beagle Scouts | |
| 4.3.0 | 2023-04-21 | Already Tomorrow | |
| 4.2.3 | 2023-03-15 | Shortstop Beagle | |
| 4.2.2 | 2022-10-31 | Innocent and Trusting | |
| 4.2.1 | 2022-06-23 | Funny-Looking Kid | |
| 4.2.0 | 2022-04-22 | Vigorous Calisthenics | |
| 4.1.3 | 2022-03-10 | One Push-Up | |
| 4.1.2 | 2021-11-01 | Bird Hippie | |
| 4.1.1 | 2021-08-10 | Kick Things | |
| 4.1.0 | 2021-05-18 | Camp Pontanezen | |
| 4.0.5 | 2021-03-31 | Shake and Throw | |
| 4.0.4 | 2021-02-15 | Lost Library Book | |
| 4.0.3 | 2020-10-10 | Bunny-Wunnies Freak Out | |
| 4.0.2 | 2020-06-22 | Taking Off Again | |
| 4.0.1 | 2020-06-06 | See Things Now | |
| 4.0.0 | 2020-04-24 | Arbor Day | |
| 3.6.3 | 2020-02-29 | Holding the Windsock | |
| 3.6.2 | 2019-12-12 | Dark and Stormy Night | See It was a dark and stormy night#Literature |
| 3.6.1 | 2019-07-05 | Action of the Toes | |
| 3.6.0 | 2019-04-26 | Planting of a Tree | |
| 3.5.3 | 2019-03-11 | Great Truth | |
| 3.5.2 | 2018-12-20 | Eggshell Igloos | |
| 3.5.1 | 2018-07-02 | Feather Spray | |
| 3.5.0 | 2018-04-23 | Joy in Playing | |
| 3.4.4 | 2018-03-15 | Someone to Lean On | |
| 3.4.3 | 2017-11-30 | Kite-Eating Tree | See Kite-Eating Tree |
| 3.4.2 | 2017-09-28 | Short Summer | See It Was a Short Summer, Charlie Brown |
| 3.4.1 | 2017-06-30 | Single Candle | |
| 3.4.0 | 2017-04-21 | You Stupid Darkness | |
| 3.3.3 | 2017-03-06 | Another Canoe | |
| 3.3.2 | 2016-10-31 | Sincere Pumpkin Patch | |
| 3.3.1 | 2016-06-21 | Bug in Your Hair | |
| 3.3.0 | 2016-05-03 | Supposedly Educational | |
| 3.2.5 | 2016-04-11 | Very, Very Secure Dishes | |
| 3.2.4 | 2016-03-11 | Very Secure Dishes | |
| 3.2.3 | 2015-12-10 | Wooden Christmas-Tree | See A Charlie Brown Christmas |
| 3.2.2 | 2015-08-14 | Fire Safety | |
| 3.2.1 | 2015-06-18 | World-Famous Astronaut | |
| 3.2.0 | 2015-04-16 | Full of Ingredients | |
| 3.1.3 | 2015-03-09 | Smooth Sidewalk | |
| 3.1.2 | 2014-10-31 | Pumpkin Helmet | See You're a Good Sport, Charlie Brown |
| 3.1.1 | 2014-07-10 | Sock it to Me | |
| 3.1.0 | 2014-04-10 | Spring Dance | |
| 3.0.3 | 2014-03-06 | Warm Puppy | |
| 3.0.2 | 2013-09-25 | Frisbee Sailing | |
| 3.0.1 | 2013-05-16 | Good Sport | |
| 3.0.0 | 2013-04-03 | Masked Marvel | |
| 2.15.3 | 2013-03-01 | Security Blanket | |
| 2.15.2 | 2012-10-26 | Trick or Treat | |
| 2.15.1 | 2012-06-22 | Roasted Marshmallows | |
| 2.15.0 | 2012-03-30 | Easter Beagle | |
| 2.14.2 | 2012-02-29 | Gift-Getting Season | See It's the Easter Beagle, Charlie Brown |
| 2.14.1 | 2011-12-22 | December Snowflakes | |
| 2.14.0 | 2011-10-31 | Great Pumpkin | See It's the Great Pumpkin, Charlie Brown |
| r-devel | N/A | Unsuffered Consequences | |