1 Introdução

1.1 História

R é “uma linguagem de programação e um ambiente para computação estatística e gráfica”10. Ambiente no sentido que é um “sistema totalmente planejado e coerente”, não uma ferramenta específica e inflexível. É uma linguagem especializada, com ferramentas poderosas e acessíveis para projetos de campos como estatística e ciência de dados. Ao mesmo tempo, é facilmente incrementável, com centenas de extensões para as mais diversas áreas.

O R foi criado em 1993 por Ross Ihaka e Robert Gentleman da Universidade de Auckland, Nova Zelândia, com o apoio de John Chambers do Bell Laboratories. Sucedeu a linguagem S, e junto com a inicial dos autores, o nome R foi cunhado. Não, infelizmente, não é R de “Ricardo”.

Existem várias entidades associadas ao desenvolvimento da linguagem:

  • O Comprehensive R Archive Network (CRAN) foi criado em 1997 por Kurt Hornik e Fritz Leisch para armazenar o código fonte, documentação, e pacotes do R.
  • O R Core Team foi formado em 1997 para desenvolver a linguagem.
  • A linguagem como projeto e homepage oficial é o R Project. Também existe a homepage das versões em desenvolvimento do R.
  • A R Foundation foi fundada em 2003 para guiar o R Project.
  • O RStudio, agora Posit foi fundado para expandir a qualidade do projeto, lançando um ambiente de desenvolvimento integrado em 2011, e oferecendo soluções para empresas.
  • O R Journal e R Blog.

1.2 Características da Linguagem, e “Porque R?”

O R é uma linguagem bem específica. Abaixo cito algumas de suas características, e porque elas podem motivar seu estudo.

  • R está disponível como código aberto, com sua licença GNU General Public License. Adicionalmente, é acessível para a maioria das máquinas/sistemas operacionais. Isso faz com que projetos no R sejam acessíveis e facilmente replicados por outros.

  • R é uma linguagem popular, ficou na posição 21 no TIOBE Index em fev/2024. Especialmente, ele conta com uma comunidade muito ativa e amigável, na #rstats do Twitter, no StackOverflow, no Posit Community, e pessoalmente.

  • Um produto dessa popularidade é a quantidade massiva de extensões, para toda sorte de tarefa.

    • Existem múltiplas abordagens para manipulação de dados, modelagem, e criação de visualizações.
    • Poderosas ferramentas para comunicação, o RMarkdown (que foi utilizado para construir esse livro), e o Shiny, utilizado para construir Apps.
    • Ferramentas na fronteira de pesquisa, uma vez que pesquisadores costumam criar pacotes no R para acompanhar suas inovações.
  • Ocupa um espaço muito interessante na paisagem de softwares:

    • É uma linguagem de programação verdadeira, permitindo soluções para problemas mais complexos, e dando mais flexibilidade ao usuário, quando comparado com outros softwares estatísticos não programáticos como o SAS, SPSS, Stata, Eviews, e GRETL.
    • Mas é especializado, interpretada, e high-level, facilitando seu uso, e apresentando uma cuva de aprendizado mais rápida que linguagens mais complexas/generalistas como C.
    • A especialização em estatística faz com que ferramentas muito necessárias para análise de dados sejam de fácil acesso, como data frames e vetorização. O usuário não precisa aprender extensões para realizar projetos em ciência de dados.
  • Algumas características mais técnicas:

    • Sua sintaxe é similar à C e Python, mas sua semântica é a de uma linguagem funcional, mais similar à Lisp e APL. Veremos que o estilo funcional é muito útil para projetos de ciência de dados.
    • Dito isso, o R é uma linguagem com múltiplos paradigmas: tem capacidades incomuns de metaprogramação, permitindo códigos elegantes e sucintos; provê programação orientada ao objeto de forma limitada, mas de maneira útil e simples.
    • O R usa código em C, C++, e Fortran para executar tarefas computacionalmente intensivas. Isso é algo que o usuário também pode explorar.

Porém, nem tudo são flores. Muitas dessas características tem prós e contras, e a execução dessas ideias conta com heranças obsoletas e inconsistências. Neste livro, deixarei claro os pontos negativos mais importantes, e ensino a evitá-los.

1.3 Literatura sobre R

A literatura base pode ser encontrada no CRAN. Ela é composta de, principalmente:

  • O código fonte.
  • O manual “R Language Definition”, que descreve a linguagem em si.
  • O manual “R Internals”, que descreve as estruturas internas do R, e a fundação do código em C.
  • A documentação de ajuda para o R base e as extensões padrões.
  • A documentação de ajuda para as extensões externas11.

Nenhuma dessas é exatamente didática, mas existe uma vasta bibliografia de livros para R, tanto para ensinar a linguagem no geral, quanto para toda sorte de aplicações.

Abaixo apresento a bibliografia principal deste livro. Na seção de introdução de cada parte, descreverei melhor as sugestões de leitura, e como elas complementam o material.

Bibliografia base da parte I: “R Language Definition”12, “R Internals”13 e “Advanced R” (2e)14.

  • Outras documentações utilizadas: código fonte15 e a documentação das extensões básicas16.
  • Outros livros utilizados: “Working with R”17, e “What They Forgot to Teach You About R”18.
  • Sugestões de leitura: “Hands on Programming with R”19, e “An Introduction to R”20.

Bibliografia base da parte II: documentação do tidyverse21, “ggplot2: Elegant Graphics for Data Analysis” (3e)22.

  • Outros livros utilizados: “Data Manipulation in R”23, e “R Programming for Data Science”24.
  • Sugestões de leitura: “Modern R with the tidyverse”25, e “STAT 545”26.

Bibliografia base das partes III e IV: “R for Data Science”27, e “R Cookbook” (2e)28.

  • Sugestões de leitura: “A ModernDive into R and the Tidyverse”29, “Everything you need for Exploratory Data Analysis & Visualization”30, “Introduction to Data Exploration and Analysis with R”31, “The Big Book of R”
  • Existem muitos outros livros e tutoriais dedicados a aplicações específicas. Algumas listas (incompletas) podem ser encontradas no arquivo do CRAN.

1.4 Estilo do Livro

Antes de prosseguir, quero expor de antemão o estilo e organização dos capítulos.

Este livro tem muito a cobrir, e tem um andamento acelerado. Para facilitar ao máximo a vida do leitor, o estilo dos capítulos foi definido para ajudar a direcionar a atenção para o que é mais importante, e menos atenção para o extra. Abaixo apresento alguns dos construtos utilizados para tal.

Pequenos excertos de código são apresentados na linha 1 + 1, e blocos de código como abaixo.

x <- 1 + 1
x * 2 #> 4

Nos exemplos deste livro, um comentário no formato #> ... indica o resultado esperado da declaração que o precede.

Palavras em negrito normalmente indicam conceitos que serão definidos. Após sua apresentação, os conceitos costumam deixar de aparecer em negrito.

Palavras em itálico costumam denotar um termo com significado específico no contexto relevante.

‘Nome’ do resultado
Resultados importantes são expostos neste tipo de bloco. Note que nem todos os resultados serão simples de entender imediatamente, mas são expostos no momento em que é relevante para o estudo da linguagem.

as vezes é importante apresentar um exemplo para esclarecer um conceito. Tendo a colocar exemplos apenas quando necessário, de modo que é importante entendê-los. Em contrapartida, não há muitos exemplos “complementares”. É natural que essa baixa frequência torne difícil a compreensão de alguns temas. Mas para isso existem os exercícios.

nesse bloco explicito pontos que o leitor deve prestar atenção. Na maioria dos casos, apresento causas comuns de erros.

observações deste tipo costumam ser sobre a organização do livro ou outros esclarecimentos menos importantes.

nesse tipo de bloco apresento referências que tratam do tema relevante com mais calma, ou trazem tópicos adicionais para o leitor que queira expandir seus conhecimentos.

Itens desse tipo costumam trazer curiosidades menos importantes.

Ao final de cada capítulo existe uma seção de “Complemento”. Nele, há:

  • Uma recapitulação dos conceitos apresentados.
  • Uma lista de funções apresentadas no capítulo.
  • Uma seção de referências, inclusive com links para conceitos deixados de lado no capítulo, para o leitor que quiser ir além.
  • Uma lista de exercícios, que normalmente também apresenta novos conceitos/funções.

1.5 Instalação, Interface, e Ferramentas

Antes de começar o aprendizado, é preciso instalar a linguagem (R), e se familiarizar com a interface do editor de código oficial (RStudio).

Veja como instalar neste tutorial do curso “R Para Jornalistas”. PS: coincidentemente, a maneira que jornalistas instalam o R serve para qualquer outra profissão também.

Existem vários tutoriais online explicando a interface, como o da Datacamp (veja até “How to Write R Scripts in RStudio”), e o video “RStudio for the Total Beginner”. Eu gosto bastante do capítulo “Getting to know RStudio” do meu amigo Bruno Rodrigues32.

Além disso, existem três configurações mais comuns de serem alteradas: alterar onde os arquivos são salvos por padrão; impedir que os dados da última sessão do R sejam recarregados quando você voltar; e alterar aparência – afinal, você só se torna um programador após passar 3h escolhendo o tema perfeito. Elas podem ser encontradas em [barra de menu] > Tools > Global Options, nas abas General e Appearance.

vide capítulo “3 - Using RStudio”33, e 3 - “Navigating the Software”34, para mais informações sobre a interface.

Até o momento, eu fui preguiçoso e não trouxe esse material para o livro. Ainda assim, veja as referências com calma, não deixe confusões com o software atrapalharem seu aprendizado.

Última coisa, eu juro. O R provê alguns comandos para procurar por ajuda. A função vignette() abre uma lista de artigos de ajuda das extensões do R. Adicionalmente, se você quer saber informações sobre uma função chamada acaba_pelo_amor_de_deus, os códigos abaixo abrem suas documentações de ajuda.

?acaba_pelo_amor_de_deus
help("acaba_pelo_amor_de_deus")

Agora sim, vamos começar. Boa sorte!