Pacotes miojo - como fazer um pacote no R em 3 minutos

Por Julio 07/09/2017

Nesse post vou mostrar como fazer um pacote em R muito, muito rápido. Tirei várias coisas que costumo fazer nos pacotes, com dor no coração, tudo pela velocidade, mantendo só o essencial.

Duas restrições que usei são

  1. O pacote precisa ficar disponível no GitHub.
  2. O pacote precisa ter pelo menos uma função.

Essa é a solução que eu acho mais segura e rápida. Você também pode usar o próprio RStudio para criar pacotes ou clonar coisas do github, mas isso pode dar alguns bugs.

Passo 1: Crie um repositório no Github

Clique no link: https://github.com/new

  • Escreva o nome do seu pacote. O nome do pacote não pode ter espaços, underline (_) nem hífen (-) nem começar com números.
  • Tique a opção Initialize this repository with a README.
  • Clique em Create repository.

Passo 2: Clonar o repositório

Recomendo clonar repositórios abrindo um terminal e digitando

$ git clone https://github.com/usuario/nomeDoPacote

Você pode clonar de outras formas, inclusive dentro do RStudio. Se você usar o RStudio, saia do projeto e delete o arquivo .RProj criado automaticamente, pois ele terá metadados inapropriados para criar pacotes.

Passo 3: usar devtools::setup()

  1. Abra uma nova sessão R em qualquer lugar.
  2. Rode devtools::setup("caminho/da/pasta/clonada/nomeDoPacote").

Passo 4: Crie sua função

Exemplo:

#' Soma 2
#' 
#' Recebe um vetor de números e retorna um vetor de números somando dois
#' 
#' @param x vetor de números.
#'
#' @export
soma_2 <- function(x) {
  x + 2
}
  1. Crie a função dentro de um arquivo com extensão .R na pasta R
  2. As informações que começam com #' acima da função servem para documentar. Nesse caso,
    • a primeira linha é o título
    • a segunda linha é a descrição
    • a parte que começa com @param descreve o que é o parâmetro de entrada
    • a parte que começa com @export diz para o pacote que essa função deve estar disponível para o usuário quando ele rodar library(nomeDoPacote).

Passo 5: document, commit e push!

  1. Rode devtools::document().
  2. Commite suas alterações.
  3. Dê um push!

Se não saba o que é commitar e pushar, veja o artigo do Athos sobre o uso do git e do GitHub.

Passo 6: Instalar o pacote em outra máquina

  1. Mande o nome do seu usuário do GitHub e o nome do seu pacote para sua migue.
  2. Peça para ela rodar:
devtools::install_github('usuario/nomeDoPacote')
  1. Agora ela poderá usar sua função!
library(nomeDoPacote)
soma_2(1:10)
# [1]  3  4  5  6  7  8  9 10 11 12

Você também pode ver o help da função com ?soma_2:

FIM!

Conclusões

  • Agora você não tem desculpa para não empacotar suas soluções em R.
  • Esse tutorial é incompleto! Para acessar mais detalhes, veja http://r-pkgs.had.co.nz, elaborado por você sabe quem.

Outras pequenas dicas práticas

  • Use sempre devtools::check() para checar se seu pacote está 100% bem construído.
  • Use devtools::use_package() para usar funções de outros pacotes.
  • Sempre use os :: para chamar as funções e nunca rode library() ou require() dentro de um pacote.
  • Use devtools::use_mit_license() para adicionar um arquivo LICENSE ao seu pacote.
  • Use abjutils::use_pipe() para poder usar o %>% nos seus pacotes.
  • Use devtools::use_data() para adicionar dados ao seu pacote.
  • Use devtools::use_vignettes() para escrever um tutorial sobre seu pacote, igual a esse do dplyr, por exemplo.

É isso. Happy coding ;)

comments powered by Disqus