Menu

Pacotes do R: install.packages(), library() e o CRAN

Como funcionam os pacotes do R: instalar do CRAN com install.packages(), carregar com library(), require() vs library(), pkg::fun() e os pacotes que vale a pena conhecer.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

O Que É um Pacote

Um pacote é um conjunto de funções, documentação e às vezes dados que estende o R. O R base te dá vetores, modelos e gráficos; os pacotes te dão todo o resto - e esse "todo o resto" é enorme. O CRAN (Comprehensive R Archive Network) hospeda cerca de 20 mil pacotes, cada um verificado pelos testes de submissão do CRAN antes de ser publicado. Esse repositório é a principal razão pela qual o R segue competitivo para trabalho com dados: seja qual for a análise, alguém provavelmente já a empacotou.

O CRAN não é a única fonte - o Bioconductor hospeda o ecossistema de bioinformática, e muitos pacotes em desenvolvimento moram no GitHub (instaláveis com remotes::install_github()) - mas, como iniciante, você pode tratar o CRAN como o padrão e os outros como coisas que vai encontrar quando um README mandar.

Um punhado de pacotes vem com o próprio R (stats, utils, graphics e companhia) e carrega automaticamente - é por isso que mean() e plot() simplesmente funcionam. Todo o resto segue o ritual de dois passos abaixo.

install.packages() Uma Vez, library() a Cada Sessão

Essa é a confusão nº 1 de iniciantes, então aqui vai da forma mais nítida possível. Colocar um pacote para funcionar são duas ações diferentes com dois tempos de vida diferentes:

install.packages("dplyr")   # ONCE per machine: downloads from CRAN and installs
library(dplyr)              # EVERY session: loads it so your code can use it
  • install.packages("dplyr") é como comprar um livro: você faz isso uma vez, e daí em diante ele fica na sua estante (seu disco). Repare nas aspas - você está passando o nome como uma string.
  • library(dplyr) é como tirar o livro da estante: você faz isso no começo de cada sessão do R (na prática, no topo de cada script). Aqui não precisa de aspas - library() é especial e aceita o nome sem elas (library("dplyr") também funciona, se você preferir consistência).

Os dois modos de falha te dizem qual passo você pulou. Error: there is no package called 'dplyr' vindo de library() significa que ele nunca foi instalado. Error: could not find function "filter" (ou "%>%") no meio de um script significa que o pacote está instalado mas esta sessão nunca o carregou. Colocar toda chamada library() bem no topo do script - e não espalhada por ele - torna a segunda falha visível no primeiro segundo, e serve também como uma lista das dependências do script. Instalar o tidyverse funciona do mesmo jeito: install.packages("tidyverse") uma vez, library(tidyverse) por sessão, o que carrega dplyr, ggplot2 e o resto do conjunto principal em uma linha.

O que você não deve fazer é deixar install.packages() dentro de um script que você roda repetidamente ou compartilha - ele rebaixa tudo a cada execução e pode surpreender quem o executar. Instalação é um ato de console; carregamento é um ato de script.

require() e pkg::fun()

require() parece um sinônimo de library(), e usá-lo assim, erroneamente, é comum. A diferença está no que acontece quando o pacote não existe: library() para com um erro; require() imprime um aviso, retorna FALSE e deixa o script continuar - normalmente para morrer vinte linhas depois com um confuso "could not find function" em vez da honesta mensagem "no package called". Para carregar dependências, use library(): falhar alto no topo é um recurso. require() se justifica apenas em verificações condicionais, em que o valor de retorno é o ponto:

if (!require(praise)) {
    install.packages("praise")
    library(praise)
}

Há também uma forma de usar um pacote sem carregá-lo de jeito nenhum: o operador :: chama uma função pelo seu endereço completo, pacote::funcao(). O pacote precisa estar instalado, mas nada é anexado à sua sessão:

(stats é carregado automaticamente de qualquer forma, então sd() puro também funciona - mas a sintaxe é a mesma para qualquer pacote instalado.) :: brilha em dois lugares: chamadas pontuais em que uma linha library() inteira é exagero, e desambiguação quando dois pacotes carregados exportam o mesmo nome - dplyr::filter() vs stats::filter() é a colisão clássica.

Mantendo os Pacotes Atualizados

Pacotes evoluem independentemente do R, então atualizar é responsabilidade sua:

update.packages()          # offers to update everything outdated
update.packages(ask = FALSE)   # same, without prompting per package

Uma regra não óbvia: pacotes são construídos contra uma versão maior.menor específica do R. Quando você atualiza o próprio R (digamos da 4.3 para a 4.4 - veja instalando o R), sua biblioteca antiga de pacotes geralmente não é levada junto, e a solução é simplesmente reinstalar os pacotes que você usa sob a nova versão. Dez minutos de install.packages(), não um desastre - mas surpreende as pessoas na primeira vez em que seus scripts saúdam uma instalação nova do R com uma parede de erros "no package called".

Vendo o Que Você Tem

Três funções respondem "o que está instalado e onde":

installed.packages()[, "Version"]   # every installed package with its version
sessionInfo()                       # R version + what THIS session has loaded
.libPaths()                         # the folders where packages are installed

installed.packages() retorna uma matriz com uma linha por pacote - a coluna Version normalmente é o que você quer. sessionInfo() é a ferramenta de reprodutibilidade: cole sua saída em um relatório de bug e quem ler saberá sua versão do R, o sistema operacional e as versões exatas de todo pacote carregado. .libPaths() mostra as pastas de biblioteca que o R pesquisa; saber que isso existe desmistifica o "para onde foi mesmo aquele pacote?" e por que direitos de administrador às vezes importam em máquinas compartilhadas.

Pacotes Que Vale a Pena Conhecer

Você não precisa deles hoje, mas vai encontrá-los o tempo todo - saber para que serve cada um ajuda a ler o código dos outros:

  • dplyr - os verbos de manipulação de dados: filter, mutate, group_by, summarize.
  • ggplot2 - o pacote gráfico padrão; a maioria dos gráficos de R que você vê online é ggplot2.
  • tidyr - remodelagem de dados entre formatos largo e longo (pivot_longer, pivot_wider).
  • readr / readxl - leitura rápida de CSV e leitura de arquivos Excel, respectivamente.
  • lubridate - datas que se comportam como você espera.
  • stringr - manipulação consistente de strings.
  • data.table - um ecossistema alternativo de data frames de alto desempenho; um dialeto diferente do tidyverse, adorado para grandes volumes de dados.
  • shiny - aplicações web interativas escritas inteiramente em R.

Os seis primeiros são o núcleo do tidyverse e chegam juntos com install.packages("tidyverse"). Não há obrigação de usar nenhum deles - o R base dá conta de tudo isso - mas o ecossistema é onde vive a maior parte do R moderno.

O Que Você Leva Daqui

  • O CRAN hospeda ~20 mil pacotes revisados; Bioconductor e GitHub cobrem o resto.
  • install.packages("nome") uma vez por máquina (aspas obrigatórias); library(nome) uma vez por sessão, no topo do script.
  • library() falha alto - o que é bom; require() retorna FALSE - útil apenas dentro de verificações.
  • pkg::fun() usa uma função sem anexar o pacote, e resolve colisões de nomes.
  • update.packages() mantém tudo em dia; uma atualização maior do R significa reinstalar pacotes.
  • sessionInfo() é como você conta a alguém (ou ao seu eu futuro) exatamente em que seu código rodou.

A seguir: o diretório de trabalho - onde o R procura arquivos, e por que essa é a primeira coisa a checar quando a leitura de dados falha.

Perguntas frequentes

Como instalo um pacote no R?

Execute install.packages("nome") com o nome do pacote entre aspas, por exemplo install.packages("dplyr"). O R o baixa do CRAN e o instala na sua máquina. Você faz isso apenas uma vez por máquina - depois disso, carregue-o em cada sessão com library(dplyr).

Qual é a diferença entre install.packages() e library()?

install.packages("dplyr") baixa o pacote para o seu computador - uma vez por máquina. library(dplyr) carrega um pacote já instalado na sessão atual - uma vez por sessão, normalmente no topo de cada script. Instalar sem carregar não te dá nada utilizável; carregar sem instalar dá erro com "there is no package called 'dplyr'".

Qual é a diferença entre library() e require() no R?

Os dois carregam um pacote, mas em caso de falha library() para com um erro enquanto require() apenas avisa e retorna FALSE. Isso faz de library() o certo para scripts - falhar alto e cedo - e de require() algo útil apenas dentro de verificações condicionais como if (!require(pkg)) install.packages(pkg).

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR