quarta-feira, 24 de junho de 2020

Criar seu próprio pacote de R

Criar pacotes é importante para o reuso e compartilhamento de funcionalidades. Vamos utilizar a biblioteca devtools, que a propósito tem uma cheat sheet excelente, além de livros sobre o assunto. Aqui vamos citar apenas os passos necessários para criação de uma biblioteca minimamente. 

Primeiro passo, instalar o pacote devtools (caso não tenha):
install.packages('devtools')
Segundo passo, iniciar um projeto de biblioteca
devtools::create('path/to/folder')
Este comando criará os arquivos DESCRIPTION e NAMESPACE, além da pasta R dentro da sua pasta do projeto. Esta é a estrutura mínima de um pacote. Agora crie um arquivo.R, substituindo arquivo pelo nome que preferir e nele implemente as suas funções
# Uma função bem simples apenas para exemplificar
# '@export
myFunction <- function(x,y)x*y
A documentação do pacote é feita com a biblioteca roxigen2, as suas tags além de permitirem a geração automática da doc também permite-nos lançar mão de recursos da lib devtools que facilitam o processo de criação. Os pacotes devtools e roxygen2 não são obrigatórios para a criação de pacotes, mas facilitam bem o processo. Não escrevo aqui sobre as tags de documentação, segue o link da doc oficial. Contudo é importante falar sobre a tag @export, ela indica para a lib devtools que aquela função marcada deve ser anotada no arquivo NAMESPACE para exportação. As funções que não são anotadas com @export permanecem privadas ao escopo do script. Então utilizamos dois comandos, um para gerar a doc e atualizar NAMESPACE. O seguinte faz o build do pacote.
devtools::document()
devtools::build()

sexta-feira, 12 de junho de 2020

renv & docker

Um projeto pode incluir muita bibliotecas, e estas podem ter n versões. O controle de dependências é fundamental para o correto funcionamento de nossas aplicações. Neste cenário entra o pacote renv . Mas não vamos falar muito sobre ele, e sim mostrar uma solução simples para montar nossas aplicações em containers Docker isolando a aplicação e garantindo que os pacotes corretos serão instalados. Observação importante: Não devemos copiar a pasta renv de dentro do nosso projeto, apenas o arquivo renv.lock.