# R (linguagem de programação)

R é uma linguagem de programação multi-paradigma orientada a objetos, programação funcional, dinâmica, fracamente tipada, voltada à manipulação, análise e visualização de dados. Foi criado originalmente por Ross Ihaka e por Robert Gentleman no departamento de Estatística da Universidade de Auckland, Nova Zelândia. Atualmente é mantido por uma comunidade de colaboradores voluntários que contribuem com código fonte da linguagem e com a expansão de funcionalidades por bibliotecas.
O nome R provém em parte das iniciais dos criadores (Ross e Robert) e também de um jogo figurado com a linguagem S (da Bell Laboratories, antiga AT&T).
R é um ambiente e uma linguagem de programação similar ao S, contudo, é uma implementação distinta do S. Muitos códigos escritos para o S podem ser executados inalterados no R e vice-versa. A implementação comercial de S é S-PLUS.
O código fonte do R está disponível sob a licença GNU GPL e as versões binárias pré-compiladas são fornecidas para Windows, Macintosh, e muitos sistemas operacionais Unix/Linux.
Um conjunto básico de pacotes vem embutido na instalação do R, com muito outros disponíveis na rede de distribuição do R (em inglês CRAN).
A linguagem R é largamente usada entre estatísticos e analistas de dados para desenvolver software de estatística e análise de dados. Pesquisas e levantamentos com profissionais da área mostram que a popularidade do R aumentou substancialmente nos últimos anos.

## História

Ross Ihaka e Robert Gentleman trabalhavam e eram colegas no departamento de estatística na Universidade de Auckland. Os dois compartilhavam o interesse por estatística computacional e viram a necessidade de um melhor ambiente de software para o laboratório da área. Os dois não acharam nenhum software compatível no mercado e começaram a tentar desenvolver um eles mesmos.
Por conta do contato prévio de Ihaka com a linguagem Scheme pareceu natural para eles começar com um interpretador baseado no dessa mesma linguagem porém já prevendo a necessidade de alterações internas consideráveis decidiram escrever o interpretador por conta própria. Segundo Ihaka a tarefa não foi tão difícil quanto parecia graças ao mapeamento do processo existente em livros como o de Hal Abelson e Gerald Sussman The Structure and Interpretation of Computer Programs e ter acesso ao código fonte de diversos interpretadores Scheme também os ajudaram nos detalhes da implementação.
A primeira versão do interpretador consistia em aproximadamente 1000 linhas de código em C e já contava com diversas funcionalidades da linguagem encontradas em posteriores versões. Para tornar o interpretador útil eles precisavam adicionar estruturas de dados para suportar uso estatístico e escolher uma interface de usuário. Optaram por uma interface de linha de comando e como ambos estavam bem familiarizados com a sintaxe de S, foi natural usarem uma parecida. Essa decisão direcionou o desenvolvimento de R no caminho que ele tomou e produziu algo que parecia muito próximo ao S, a partir daí mais e mais características foram adotadas dessa linguagem.
Porém apesar das semelhanças entre S e R, existem diversas diferenças chaves. As duas fundamentais são resultado da influência do Scheme no R, a primeira refere-se ao gerenciamento de memória. No R uma quantidade fixa de memória é alocada na inicialização e é gerenciada com um coletor de lixo simultâneo à execução.
Isso resulta em pequenos problemas de crescimento de heap e menos problemas com paginação que são vistos em S. A segunda diferença refere-se ao escopo, em S as variáveis de funções ou são globais ou são locais já em R as funções acessam as variáveis que estavam em vigor quando a função foi definida; uma ideia que vem de linguagens mais antigas como o Algol 60 e presente em Scheme e outras com escopo léxico.
Em geral as regras de escopo usadas em R são bem aceitas porque promovem um estilo de programação limpo e foram mantidas pelos criadores apesar do fato delas complicarem a implementação do interpretador.
Depois de aproximadamente um ano Gentleman e Ihaka desenvolveram o que parecia ser um software com uso potencial e começaram a prepará-lo para ser usado pelos alunos no laboratório. Motivados pelo trabalho feito os dois disponibilizaram algumas cópias binárias do R no diretório da Statlib e fizeram um pequeno anúncio na lista de emails da S-news em 3 de Agosto de 1993. Diversas pessoas utilizaram os binários disponibilizados e ofereceram feedback. Ihaka destaca uma pessoa em especial como sendo a mais persistente, Martin Mächler do Instituto Federal Suíço de Tecnologia em Zurique na sigla em Alemão ETH Zurich, quem os encorajou para lançar o código fonte do R como software livre.
Apesar de algumas dúvidas iniciais em Junho de 1995 os dois concordaram em disponibilizar o código fonte por FTP sob os termos da licença geral promovida pela Free Software Foundation. Na época o desenvolvimento do R era um processo relativamente fechado, Robert, Ross e posteriormente Martin recebiam os relatórios de bugs e de tempo em tempo disponibilizavam versões atualizadas da linguagem. Não havia nenhum forum para os usuários discutirem entre si, então foi decidido criar uma pequena lista de email por onde as discussões voltadas à linguagem aconteceriam. Com o crescimento do interesse pela linguagem manter a lista de email começava a não parecer mais uma opção viável, até porque em Auckland eles estavam pagando pelo serviço de email e o custo começava a ficar notavel. Matin então se voluntariou em hospedar o serviço de manutenção automatizado das listas de email na ETH Zurich. Em março de 1996 a lista r-testers foi criada e aproximadamente um ano depois foi substituída por três novos grupos de notícias: r-announce, r-help e r-devel. Foi percebido também a necessidade de uma de uma forma melhor de distribuição Kurt Hornik e Fritz Leisch então tomaram a tarefa e estabeleceram o Comprehensive R Archive Network com a sigla CRAN.
Com a criação desses grupos o desenvolvimento do R acelerou por conta das contribuições que variavam desde correções de erros ortográficos até mudanças significativas em funcionalidades e performance. O nível de contribuição era tão alto que os três não conseguiam realizar mudanças na frequência desejada por aqueles que pediam. Com o objetivo de mudar isso em meados de 1997 foi estabelecido um maior grupo principal de pessoas que poderiam fazer mudanças no código fonte.
Em 29 de Fevereiro de 2000, o software foi considerado com funcionalidades e estável o suficiente para a versão 1.0. R contava com um ciclo regular de seis meses de atualizações e havia algo em torno de 20 desenvolvedores, incluindo pesquisadores bem conhecidos no meio estatístico, no grupo principal mantendo e expandindo as funcionalidades básicas do interpretador da linguagem. A partir daí R se tornou um projeto colaborativo internacional de desenvolvimento e pesquisa mantido formalmente pela R Foundation, uma fundação sem fins lucrativos situada em Vienna, distribuído pelo CRAN e ainda sob a licença de software livre.

## Ferramentas de produtividade

Existem diversas GUI para R, incluindo JGR, RKWard, SciViews-R, Rcmdr e, mais recentemente, RStudio.
Muitos editores oferecem recursos que facilitam o trabalho com o R: Emacs, Vim, NeoVim, jEdit, Kate, Tinn-R, entre outros. Existem plug-ins para uso com as IDEs Eclipse e Visual Studio.
Software construído de modo colaborativo, com novos pacotes e GUIs incluídos a cada intervalo de tempo, antecipando-se até a alguns outros pacotes proprietários, como o complemento com o teste de Scott-Knottpara a Análise de Variâncias ANOVA.

## Recursos estatísticos

A R disponibiliza uma ampla variedade de técnicas estatísticas e gráficas, incluindo modelação linear e não linear, testes estatísticos clássicos, análise de séries temporais (time-series analysis), classificação, agrupamento e outras. A R é facilmente extensível através de funções e extensões, e a comunidade R é reconhecida pelos seus contributos ativos em termos de pacotes. Existem diferenças importantes, mas muito código escrito para S corre inalterado. Muitas das funções padrão do R são escritas no próprio R, o que torna fácil para os usuários seguir as escolhas algorítmicas feitas. Para tarefas computacionais intensivas, os códigos C, C++, e Fortran podem ser ligados e chamados durante a execução. Usuários experientes podem escrever código C ou Java para manipular diretamente objetos R.
O R é fortemente extensível através do uso de pacotes enviados pelo utilizador para funções específicas ou áreas específicas de estudo. Devido à sua herança do S, o R possui fortes recursos de programação orientada por objetos, mais que a maioria das linguagens de computação estatística. Ampliar o R também é facilitado pelas suas regras de contexto lexical.
Outra força do R são os gráficos estáticos, que podem produzir imagens com qualidade para publicação, incluindo símbolos matemáticos. Gráficos dinâmicos e interativos estão disponíveis através de pacotes adicionais.
O R tem a sua própria documentação em formato LaTeX, a qual é usada para fornecer documentação de fácil compreensão, simultaneamente on-line em diversos formatos e em papel.

## Recursos de programação

A R é uma linguagem interpretada tipicamente utilizada através de um Interpretador de comandos. Se um usuário escreve "2+2" no comando de inserção e pressiona enter, o computador responde com "4", conforme se mostra abaixo:
Como muitas outras linguagens, a R suporta matrizes aritméticas. A estrutura de dados da R inclui escalares, vetores, matrizes, quadros de dados (similares a tabelas numa base de dados relacional) e listas. O sistema de objetos da R é extensível e inclui objectos para, entre outros, modelos de regressão, séries temporais e coordenadas geoespaciais.
A R suporta programação processual com funções e, para algumas funções, programação orientada a objetos com funções genéricas. Uma função genérica atua de forma diferente dependendo do tipo de argumentos que é passado. Por outras palavras a função genérica determina (dispatches) a função (método) específica para aquele tipo de objeto. Por exemplo, a R tem uma função genérica print que pode imprimir quase qualquer tipo de objeto em R com uma simples sintaxe "print(nomedoobjeto)".
Enquanto a R é maioritariamente usada por estatísticos e outros utilizadores que requerem um ambiente para computação estatística e desenvolvimento de software, pode ser igualmente usada como uma caixa de ferramentas para cálculo matricial geral com benchmarks de desempenho comparáveis ao GNU Octave ou ao MATLAB.

## Exemplos
### Exemplo 1

Os seguintes exemplos ilustram a sintaxe básica da língua e o uso do interface de linha de comando.
Na R, o largamente preferido operador de atribuição é uma seta formada por dois caracteres "←", embora "=" possa ser usado em sua vez.

### Exemplo 2

Código R curto calcula o conjunto de Mandelbrot através das primeiras 20 iterações da equação z = z² + c mapeados para diferentes constantes complexas c. Este exemplo demonstra:
* O uso de bibliotecas externas (chamadas pacotes) desenvolvidas pela comunidade, neste caso, o pacote caTools
* Manipulação de número complexo.
* Matrizes multidimensionais de números usados como tipos de dados básicos, ver variáveis C, Z e X.

### Exemplo 3
## Pacotes

As capacidades da R são estendidas através de pacotes criados pelo usuário, que permitem técnicas estatísticas especializadas, dispositivos gráficos, capacidades de importação/exportação, ferramentas de relatórios, etc. Estes pacotes são primeiro desenvolvidos em R, e por vezes em Java, C e Fortran. Um conjunto básico de pacotes são incluídos com a instalação do R, com 5300 pacotes adicionais (a partir de abril 2012) disponíveis em Comprehensive R Archive Network (CRAN), Bioconductor, e outros repositórios.
A página "Task Views" (lista de assuntos) no website da CRAN lista a vasta gama de aplicações (Finança, genética, aprendizagem de máquinas, imagiologia médica, ciências sociais e estatísticas espaciais) nos quais R tem sido aplicada e para que pacotes está disponível.
Outros recursos do pacote R incluem Crantastic, um site comunitário para avaliação e revisão de todos os pacotes CRAN, e também R-Forge, uma plataforma central para o desenvolvimento colaborativo de pacotes R, software relacionado com R, e projetos. Tem muitos documentos não publicados, pacotes beta e versões de desenvolvimento de pacotes CRAN.
O projeto Bioconductor disponibiliza pacotes R para a análise de dados genómicos, tais como Affymetrix e cDNA de análise e manipulação de dados orientadas a objetos, e começou disponibilizar ferramentas para a análise de dados da próxima geração de métodos de alto rendimento de sequenciação.
A pesquisa reprodutível e geração automática de relatórios pode ser realizada com pacotes que suportam a execução de código R incorporado em LaTeX, OpenDocument format e outros marcadores (markups).

### Acelerador e eficiência de memória

Teste é um pacote jit que disponibiliza compilação JIT, e outro pacote compilador que oferece um compilador de byte-code para o R.
Existem diversos pacotes (snow, multicore, parallel) que disponibilizam paralelismo para o R.
O pacote ff economiza memória arquivando dados no disco. As estruturas de dados comportam-se como se estivessem na RAM. O pacote ffbase disponibiliza funções estatísticas básicas para o 'ff'.

## Versões

A lista completa de alterações é mantida no arquivo "R News" no site CRAN. Alguns destaques para algumas das principais versões estão listados abaixo.$^[$
| Versão | Data | Descrição |
| 0.16 | | Essa foi a última versão alpha desenvolvida primariamente por Ihaka e Gentleman. Muitas das funcionalidades descritas no "Livro Branco" (Modelos Estatísticos em S) foram implementadas. A lista de emails começou em 1 de Abril de 1997. |
| 0.49 | 1997-04-23 | Esse é o código fonte mais antigo disponível no CRAN. O próprio CRAN foi lançado nessa data, com 3 mirrors hospedando inicialmente 12 pacotes. Versões Alpha do R para Microsoft Windows e Mac OS foram disponibilizadas logo depois dessa versão. |
| 0.60 | 1997-12-05 | R se torna parte do Projeto GNU. O código passa a ser hospedado e mantido usando CVS. |
| 0.65.1 | 1999-10-07 | Primeiras versões das funções update.packages e install.packages para download e instalação de pacotes do CRAN. |
| 1.0 | 2000-02-29 | Considerada pelos desenvolvedores como estável para uso em produção. |
| 1.4 | 2001-12-19 | Métodos S4 foram introduzidos e a primeira versão para Mac OS X foi lançada pouco depois. |
| 2.0 | 2004-10-04 | Introduzido lazy loading, que permite carregamento mais rápido de dados e gasto de memória reduzido. |
| 2.1 | 2005-04-18 | Suporte para UTF-8 e esforços iniciais para localização e internacionalização para outros idiomas. |
| 2.11 | 2010-04-22 | Suporte para sistemas Windows de 64 bits. |
| 2.13 | 2011-04-14 | Adicionada uma nova função ao compilador que permite acelerar a execução das instruções traduzindo-as para byte-code. |
| 2.14 | 2011-10-31 | Adicionados namespaces mandatórios para os pacotes. Adicionado um novo pacote parallel. |
| 2.15 | 2012-03-30 | Novas funções de balanceamento de carga. Velocidade de serialização melhorada para vetores longos. |
| 3.0 | 2013-04-03 | Suporte para indexadores numéricos de valor 2$^{31}$ e maiores em sistemas de 64 bits. |

## Interfaces
### Interfaces de usuário gráficas

* RGUI – vem com uma versão pré-compilada do R para Microsoft Windows.
* Tinn-R – Editor/processador de texto disponível apenas para Windows.
* Java Gui for R – Editor baseado em Java, multi-plataforma e independente de terminais R (também conhecido como JGR).
* Deducer – Interface gráfica para análise de dados orientado ao uso de menus (similar ao SPSS/JMP/Minitab).
* Rattle GUI – Interface gráfica multi-plataforma baseada no RGtk2 e criada especificamente para data mining.
* R Commander – multi-plataforma baseada em menus orientados sobre interface de usuário gráfica baseada no tcltk (vários plug-ins para Rcmdr também estão disponíveis).
* RapidMiner
* RExcel – usando R e Rcmdr a partir do Microsoft Excel.
* RKWard – Interface de usário gráfica extensível e IDE para R.
* RStudio – multi-plataforma de fonte aberta IDE (que também pode ser corrida num servidor remoto linux).
* RTVS - Suporte para a linguagem R no Visual Studio da Microsoft fornecido pela Revolution Analytics.
* Weka - permite a utilização de recursos de mineração de dados em Weka e análise estatística em R.
* Existe um número especial do Journal of Statistical Software (de junho de 2012) que discute as interfaces de usuário gráficas para o R.

### Editores e IDEs

Editores de texto e ambientes integrados de desenvolvimento (IDEs) com algum suporte para R incluem: Tinn-R, Bluefish, Crimson Editor, ConTEXT, Eclipse (StatET), Emacs (Emacs Speaks Statistics), LyX (módulos para knitr e Sweave), Vim, Geany, jEdit, Kate, R Productivity Environment (parte da Revolution R Enterprise) RStudio, TextMate, gedit, SciTE, WinEdt (R Package RWinEdt) e Notepad++.

### Linguagens de Script

As funcionalidades do R foram tornadas acessíveis a partir de diversas linguagens de script como a Python (pelo pacote de interface do RPy), Perl(pelo módulo Statistics::R), e Ruby (com o rsruby rubygem). PL/R pode ser usado juntamente, ou em vez da linguagem de script PL/pgSQL no sistema de gestão de bases de dados PostgreSQL e Greenplum. Scripts no próprio R são possíveis via littler bem como via Rscript.

## useR! conferências

"useR!" é o nome dado à reunião anual oficial dos usuários do R. O primeiro destes eventos foi o useR! 2004 em maio de 2004, em Viena de Áustria. Depois de saltar 2005, a conferência useR tem tido lugar anualmente, alternando habitualmente entre localizações na Europa e na América do Norte.
Esta é lista das conferências useR!:
* useR! 2004, Viena, Áustria
* useR! 2006, Viena, Áustria
* useR! 2007, Ames, Iowa, Estados Unidos da América
* useR! 2008, Dortmund, Alemanha
* useR! 2009, Rennes, França
* useR! 2010, Gaithersburg, Maryland, Estados Unidos da América
* useR! 2011, Coventry, Reino Unido
* useR! 2012, Nashville, Tennessee, Estados Unidos da América
* useR! 2013, Albacete, Espanha
* useR! 2014, Los Angeles, Califórnia, Estados Unidos da América
* useR! 2015, Aalborg, Dinamarca
* useR! 2016, Stanford University, Stanford, Califória, Estados Unidos da América
* useR! 2017, Bruxelas, Bélgica
* useR! 2018, Brisbane, Austrália
* useR! 2019, Toulouse, França
* useR! 2020, Online

## Comparação com SAS, SPSS e Stata

O consenso geral é que o R se compara bem com outros populares pacotes estatísticos, tais como SAS, SPSS e Stata. Em janeiro de 2009, o New York Times publicou um artigo sobre o aumento de aceitação do R entre os analistas de dados e apresentando uma potencial ameaça para a quota de mercado ocupada por pacotes estatísticos comerciais, como o SAS.

## Suporte comercial para o R

Em 2007, a empresa Revolution Analytics foi fundada para disponibilizar suporte comercial para a Revolution R, a sua distribuição do R, que também inclui componentes desenvolvidos pela companhia. Os principais componentes adicionais incluem: ParallelR, o ambiente de produtividade IDE para o R, ScaleR (para análise de grandes dados), DeployR, quadro de serviços web, e a capacidade para ler e escrever dados no formato de arquivos do SAS. Em Abril de 2015 a empresa foi adquirida pela Microsoft e seus produtos estão sendo gradativamente integrados a serviços do Microsoft Azure, a plataforma de cloud computing da Microsoft.
Em outubro de 2011, a Oracle Corporation anunciou o Big Data Appliance, que integra o R, o Apache Hadoop, o Oracle Enterprise Linux, e uma base de dados NoSQL com o hardware Exadata. O Oracle R Enterprise é agora um dos dois componentes do "Oracle Advanced Analytics Option" (o outro componente é o Oracle Data Mining).
Outros grandes sistemas de software comercial que suportam conexões ou integração com o R incluem: JMP, Mathematica, MATLAB, Spotfire, SPSS, STATISTICA, Platform Symphony e SAS.
TIBCO, o atual proprietário da linguagem S-Plus, está a permitir que alguns dos seus empregados apoiem ativamente o R participando na sua lista de discussão R-Help (anteriormente mencionada), e pelo patrocínio da série useR das reuniões de grupos de usuários. A Google é um grande utilizador interno do R e publica um guia de estilo. Patrocina os projetos R nos seus trabalhos Summer-of-Code, e também suporta financeiramente as séries de reuniões useR.
RStudio oferece software, educação e serviços para a comunidade R.