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 site www.r-project.org 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.David Smith (2012); R Tops Data Mining Software Poll , Java Developers Journal, May 31, 2012.Karl Rexer, Heather Allen, & Paul Gearan (2011); 2011 Data Miner Survey Summary , presented at Predictive Analytics World, Oct. 2011.Robert A. Muenchen (2012);The Popularity of Data Analysis Software.
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-Knott para 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:
> 2+2 4
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.
> x ← c(1,2,3,4,5,6) # Create ordered collection (vector) > y ← x^2 # Square the elements of x > print(y) # print (vector) y 1 4 9 16 25 36 > mean(y) # Calculate average (arithmetic mean) of (vector) y; result is scalar 15.16667 > var(y) # Calculate sample variance 178.9667 > lm_1 ← lm(y ~ x) # Fit a linear regression model "y = f(x)" or "y = B0 + (B1 * x)" # store the results as lm_1 > print(lm_1) # Print the model from the (linear model object) lm_1
Call: lm(formula = y ~ x)
Coefficients: (Intercept) x -9.333 7.000
> summary(lm_1) # Compute and print statistics for the fit # of the (linear model object) lm_1
Call: lm(formula = y ~ x)
Residuals: 1 2 3 4 5 6 3.3333 -0.6667 -2.6667 -2.6667 -0.6667 3.3333
Coefficients: Estimate Std. Error t value Pr(>|t|)