Reprodutibilidade em R e GitHub


NT265/NE441 - Análise de dados e apresentação de gráficos usando a linguagem R

26 de novembro de 2025

Conteúdo


  • Reprodutibilidade
  • Controle de versão: git e GitHub
  • Ambiente reprodutível: renv
  • Documentos dinâmicos: Quarto
  • Aplicações web (apps): Shiny

Repositório do GitHub


https://github.com/mauriciovancine/workshop-quarto-git-github

Reprodutibilidade

Capacidade de recriar uma análise e obter os mesmos resultados com os mesmos dados e códigos

Reprodutibilidade

Por que reprodutibilidade importa?


  • Transparência científica: todos podem verificar e entender o processo
  • Reutilização de código e dados: economiza tempo e reduz erros
  • Colaboração eficiente: equipes trabalham com o mesmo ambiente
  • Base sólida: análises confiáveis, auditáveis e atualizáveis

Reprodutibilidade

Pilares

  1. Organização do projeto
    • Diretórios: /data, /R, /output, /scripts
  2. Controle de versão
    • git + GitHub para rastrear mudanças
  3. Gerenciamento de dependências
    • renv: fixar versões dos pacotes
  4. Documentação clara
    • Descrever métodos e passos no README ou documento Quarto
  5. Automação e repetição
    • Scripts reproduzem todo o fluxo das análises
    • Web applications (apps) Shiny para interação on-line

1. Organização do projeto

Organização do projeto

Projeto R (.Rproj)

  • Facilita o trabalho em múltiplos ambientes
  • Cada projeto possui seu diretório, documentos e workspace
  • Permite controle de versão (git e GitHub)

Organização do projeto

Projeto R (.Rproj)

Organização do projeto

Diretórios e nomes de arquivos

2. Controle de versão

Controle de versão

Quem nunca…

Controle de versão

Manejar projetos individualmente



Controle de versão

Manejar projetos compartilhados

Controle de versão

Manejar projetos no tempo

Controle de versão

Principal ferramenta utilizada em grandes projetos

Controle de versão

Cada vez mais necessário em colaborações

git e GitHub

git e GitHub

git

  • Software (app) que faz o controle de versão
  • Maneja os repositórios locais (computador) e repositório remotos (e.g. GitHub)

git e GitHub

git

  • Criado por Linus Torvalds em 2005 para substituir o BitKeeper no gerenciamento do Kernel Linux
  • Software livre, distribuído sob a licença GNU GPL v.2

git e GitHub

GitHub

  • Repositórios remotos
  • Plataformas de hospedagem e controle de versão de arquivos/códigos

git e GitHub

GitHub

  • Plataforma de hospedagem de código e arquivos com controle de versão usando o git
  • Desenvolvido em 2008 usando Ruby on Rails por ‘computeiros’ de São Francisco
  • Em 2018, a Microsoft anunciou a compra da plataforma por US$ 7,5 bilhões

git e GitHub

ATENÇÃO: dois conceitos!

  • git: software (app) que faz o controle de versão
  • GitHub: plataforma para hospedar códigos versionados

git e GitHub

ATENÇÃO: dois conceitos!

  • git: software (app) que faz o controle de versão
  • GitHub: plataforma para hospedar códigos versionados

Detalhes do GitHub

Detalhes do GitHub

Perfil

Detalhes do GitHub

Perfil

  • Overview: suas informações (rede social)
  • Repositories: lista todos os repositórios
  • Projects: ferramentas de gerenciamento (Kanban e tarefas)
  • Packages: pacotes (bibliotecas) ou containers (Docker)
  • Stars: respositórios marcados com estrela

Detalhes do GitHub

Settings: superior direito > foto do perfil > Settings

Detalhes do GitHub

Settings: superior direito > foto do perfil > Settings

Detalhes do GitHub

Settings

Detalhes do GitHub

Repositório

Detalhes do GitHub

Repositório

  • Code: arquivos, histórico, clone/download e README.md
  • Issues: rastrear bugs, sugestões de melhorias ou tarefas
  • Pull requests: gerencia propostas de alterações no código
  • Actions: gerencia fluxos de trabalho automatizados
  • Projects: ferramentas de gerenciamento visual (Kanban)
  • Wiki: documentação extensa e detalhada do projeto
  • Security: ajuda a gerenciar a segurança do código
  • Insights: fornece análises detalhadas sobre o repositório
  • Settings: gerencia as configurações do repositório

Detalhes do GitHub

README.md

Detalhes do GitHub

README.md

  • Arquivo de documentação principal de um repositório
  • Escrito em Markdown (formatação simples e amigável)
  • Aparece automaticamente na página inicial do repositório
  • Fornece informações essenciais sobre o projeto
  • Apresenta o propósito do projeto
  • Explica o conteúdo dos arquivos de códigos e diretórios

Criando um repositório

Criando um repositório

Criar repositório: Perfil > Repositories > New

Criando um repositório

Criar um repositório

  1. Nome do repositório
  2. Descrição (opcional)
  3. Público ou privado
  4. Add um README.md
  5. Add .gitignore
  6. Licença
  7. Criar repositório

Controle de versão na prática

Controle de versão na prática

Duas formas de trabalhar com o git e GitHub

  1. Iniciando um projeto em nosso computador - localmente (git)
  2. Iniciando por um repositório remoto - remotamente (GitHub)

Controle de versão na prática

Controle de versão na prática

Controle de versão na prática

Iniciando localmente

Iniciando localmente

git init: inicia o versionamento de um repositório local

Iniciando remotamente

Iniciando remotamente

Fork: cópia de um repositório para o seu repositório (GitHub)

Iniciando remotamente

Fork: cópia de um repositório para o seu repositório (GitHub)

Iniciando remotamente

Clonar: download de um repositório remoto (e.g. GitHub) para o seu repositório local (computador)

Iniciando remotamente

git clone: download de um repositório remoto (e.g. GitHub) para o seu repositório local (computador)

Há várias formas de se fazer um clone de um repositório

Iniciando remotamente

  1. Download diretamente do repositório no formato .zip

Iniciando remotamente

  1. Usando o terminal para clonar pelo SSH (configurado anteriormente)

Iniciando remotamente

  1. Usando o terminal para clonar pelo SSH (configurado anteriormente)
$ git clone git@github.com:mauriciovancine/teste.git


Iniciando remotamente

  1. Usando o Projeto do RStudio para clonar pelo SSH (configurado anteriormente)

Iniciando remotamente

Criar um Projeto R com controle de versão

File > New Project > Version Control

Iniciando remotamente

Escolher clonar repositório do GitHub

Git

Versionamento

Versionamento

Versionamento

Comandos git para o fluxo de trabalho dos repositórios

Versionamento

Fluxo do versionamento

Versionamento

Fluxo do versionamento

  1. Diretório de trabalho (working directory): pasta com os arquivos [working tree] (.git)
  2. Preparação (staging area): arquivos adicionados para serem versionados [Index] (.git)
  3. Repositório (repository): versão consolidada dos arquivos [HEAD] (.git)

Versionamento

Versionamento

Versionamento

ATENÇÃO!

  • Mensagens de commit são fundamentais
  • Devem ser curtas e indicar as mudanças feitas nos arquivos/repositório

Versionamento

Ramificações: git branch, git switch e git merge

Ramificações

  • Branch (ou ramo) é uma linha paralela de desenvolvimento

Ramificações

  • Branch (ou ramo) é uma linha paralela de desenvolvimento

  • Funções:

    • Separar novas funcionalidades
    • Isolar correções de bugs
    • Trabalhar em paralelo com segurança
    • Facilitar a colaboração em equipe
    • Testes sem arriscar o código principal (main ou master)

Ramificações

Importante!

  • Criar uma branch significa criar um novo ponteiro que pode evoluir independentemente
  • Os arquivos locais permanecem os mesmos; apenas o histórico e o ponteiro mudam
  • Apenas arquivos versionados (git add e git commit) fazem parte da branch
  • Uma branch é como um marcador de página: você não copia o livro, apenas marca onde continuar

Ramificações

git merge: mescla as branches em uma única branch

CUIDADO!

Remoto

git push: envia suas alterações (commits) feitas localmente para o repositório remoto (GitHub)

Remoto

git pull: busca atualizações do repositório remoto e as traz para o repositório local, alterando a branch atual

Pull request

Pull Request: solicita que o repositório remoto original (GitHub) aceite (pull - ‘puxe’) as alterações realizadas do fork

Resumindo

Resumindo

Simplificado

Resumindo

Completo

Interface Gráfica do RStudio

Agradecimento mais que justo

Agradecimento à Beatriz Milz pelas figuras surrupiadas (eu pedi…)

Interface Gráfica do RStudio

Git Panel

  • RStudio tem um cliente Git na aba “Git”
  • Esse painel aparece em projetos que estejam versionados com git

Interface Gráfica do RStudio

Git Panel - Detalhes

Interface Gráfica do RStudio

Git Panel - Branches

Interface Gráfica do RStudio

Git Panel - Diff - Changes: Revisar mudanças

Interface Gráfica do RStudio

Git Panel - Diff - History: Histórico de mudanças

Interface Gráfica do RStudio

Git pane - Staged

Interface Gráfica do RStudio

Git pane - Staged e File status

Interface Gráfica do RStudio

Git pane - Commit

Interface Gráfica do RStudio

Git pane - Commit

Interface Gráfica do RStudio

Git pane - Push e Pull

Últimas palavras

3. Gerenciamento de dependências

Pacotes no R

  • Os pacotes mudam com o tempo (versões)
  • Quebras de código entre as principais versões
  • Acessível a partir de diferentes repositórios (CRAN, GitHub, R Universe, etc.)
  • Apenas uma versão de um pacote pode ser instalada
  • Um pacote pode ter muitas dependências

Temos que especificar os pacotes necessários, suas versões e os repositórios nos quais eles estão acessíveis

Pacotes no R

Biblioteca vs pacote

  • Biblioteca: diretório onde os pacotes são instalados
  • Pacote: coleção de funções, documentação, dados e testes
# bibliotecas
.libPaths()
[1] "/home/mude/R/x86_64-pc-linux-gnu-library/4.5"
[2] "/usr/local/lib/R/site-library"               
[3] "/usr/lib/R/site-library"                     
[4] "/usr/lib/R/library"                          
# pacotes
find.package("base")
[1] "/usr/lib/R/library/base"
find.package("renv")
[1] "/home/mude/R/x86_64-pc-linux-gnu-library/4.5/renv"

renv

Gerenciamento de pacotes

  • Cria um ambiente reprodutível (reproducible environment) e isolado de pacotes para cada projeto
  • Armazena versões dos pacotes em renv.lock
install.packages("renv")
library(renv)

renv

Por que usar renv?

  • Evita conflitos de versão funções mudam entre versões
  • Reproduz resultados mesmo após atualizações do R
  • Compartilha ambientes com colegas ou colaboradores
  • Documenta automaticamente os pacotes usados

renv

Funções


Função Descrição
init() Inicializa renv em um projeto
status() Verifica consistências entre o lockfile e a biblioteca do projeto
snapshot() Registra o estado atual da biblioteca do projeto no lockfile
restore() Restaura a biblioteca do projeto a partir de um lockfile
install() Instala pacotes na biblioteca do projeto
remove() Remove pacotes da biblioteca do projeto
deactivate() Desativa temporariamente renv para o projeto
activate() (Re)ativa renv no projeto

renv

Workflow

renv

Sistema de bibliotecas


Default R behaviour

Library system with renv

renv

Arquivos e diretório

  • .Rprofile: arquivo de perfil do projeto do RStudio
  • renv/: diretório que armazena as versões dos pacotes
  • renv.lock: arquivo com as versões de cada pacote para reconstruir o ambiente
.
├── .Rprofile          # Activate renv on project opening
│
├── renv/
│   ├── .gitignore     # Ignore large renv files (e.g. packages)
│   ├── activate.R     # R script to launch renv
│   ├── library/       # R packages
│   └── settings.dcf   # renv settings
│
└── renv.lock

renv

Fluxo de uso


# Inicializar ambiente renv
renv::init()

# Verificar o estado atual dos pacotes
renv::status()

# Instalar pacotes usando o renv
renv::install("tidyverse")

# Registrar estado atual dos pacotes
renv::snapshot()

# Restaurar ambiente em outra máquina
renv::restore()

renv

Colaborando com renv

  • Basta compartilhar o arquivo renv.lock
  • Então seu colega terá que inicializar o renv no projeto
  • Todos os pacotes no arquivo renv.lock serão instalados na biblioteca do projeto
# Restaurar ambiente em outra máquina
renv::restore()

renv

Recomendações

  • Use renv no final do projeto para congelar seu ambiente de pacotes e depois compartilhar o renv.lock
  • Adicione renv/ ao .gitignore
  • Versionar somento o renv.lock

4. Documentação clara

Documentação no R

Documentação no R

Documentação de pesquisa

  • Registro sistemático, claro e organizado das etapas de um projeto científico, desde o planejamento até a publicação

  • Garante que o trabalho possa ser entendido, verificado e reproduzido por outros pesquisadores

Documentação no R

Escrita científica

Documentação no R

Programação Literária

Programação literária é um paradigma de programação introduzido em 1984 por Donald Knuth (LaTeX), no qual um programa de computador é apresentado como uma explicação de como ele funciona em uma linguagem natural (e.g. inglês), intercalado (embutido) com trechos de macros e código-fonte tradicional, a partir dos quais um código-fonte compilável pode ser gerado.

Conceito inicial

Implementação moderna com Quarto

Quarto

Descrição

  • Fornece uma estrutura para ciência de dados, combinando código, resultados e texto
  • Documentos são totalmente reproduzíveis, automatizando a inclusão das últimas versões dos resultados e análises
  • Quarto é a nova geração do R Markdown

Quarto

Software

  • Software novo que não depende do R (instalado com o RStudio)
  • Interface de linha de comando - Command Line Interface (CLI)
  • Podemos usar o Quarto no terminal
quarto help

Quarto

Multiplas saídas

  • Múltiplos formatos de saída: páginas web, PDFs, Word, sites, livros e mais

Quarto

Usos

  1. Comunicação com tomadores de decisão ou público mais amplo, com foco nas conclusões, não nos códigos das análises

  2. Colaboração com outros cientistas de dados, interessados tanto nas conclusões quanto nos códigos

  3. Ambiente para fazer ciência de dados, como um caderno de laboratório moderno, registro do que foi feito e dos pensamentos

Quarto

Funcionamento


Quarto

Funcionamento


Quarto

Projeto Quarto

Quarto

Arquivo Quarto (.qmd)

Quarto

Arquivo Quarto (.qmd)

Quarto

Arquivo Quarto (.qmd) - Source editor

Quarto

Arquivo Quarto (.qmd) - Visual editor

Quarto

Arquivo Quarto (.qmd) - Renderizar

Quarto

Arquivo Quarto (.qmd) - Anatomia






  • YAML (Yet Another Markup Language): cabeçalho (início do .qmd) onde são inseridas as configurações do documento (formatação, data, título, autor etc.), delimitado por --- e ---
  • Texto: usa markdown como sua sintaxe de documento principal
  • Códigos (chunks): blocos de códigos onde se insere códigos em R, Python, Julia e outros, delimitado por ```{r} e ```

Quarto

Arquivo Quarto (.qmd) - Anatomia




---
title: "Hello, Penguins"
format: html
execute:
  echo: false
---

## Meet the penguins

The __penguins__ data contains size measurements for 
penguins from three islands in the Palmer Archipelago, 
Antarctica.

The _three_ species of penguins have quite distinct 
distributions of physical dimensions (@fig-penguins).

# ```{r}
#| label: fig-penguins
#| fig-cap: "Dimensions of penguins across three species."
#| warning: false
library(tidyverse, quietly = TRUE)
library(palmerpenguins)
penguins |>
  ggplot(aes(x = flipper_length_mm, y = bill_length_mm)) +
  geom_point(aes(color = species)) +
  scale_color_manual(
    values = c("darkorange", "purple", "cyan4")) +
  theme_minimal()
# ```

Quarto

Arquivo Quarto (.qmd) - Anatomia


---
title: "Hello, Penguins"
format: html
execute:
  echo: false
---

## Meet the penguins

The __penguins__ data contains size measurements for 
penguins from three islands in the Palmer Archipelago, 
Antarctica.

The _three_ species of penguins have quite distinct 
distributions of physical dimensions (@fig-penguins).

#| label: fig-penguins
#| fig-cap: "Dimensions of penguins across three species."
#| warning: false
library(tidyverse, quietly = TRUE)
library(palmerpenguins)
penguins |>
  ggplot(aes(x = flipper_length_mm, y = bill_length_mm)) +
  geom_point(aes(color = species)) +
  scale_color_manual(
    values = c("darkorange", "purple", "cyan4")) +
  theme_minimal()

Quarto

Arquivo Quarto (.qmd) - YAML - Formato

HTML

---
title: "Título"
format: html
editor: visual
---

Word

---
title: "Título"
format: docx
editor: visual
---

PDF

Precisa instalar um pacote LaTeX

---
title: "Título"
format: pdf
editor: visual
---

Quarto

Arquivo Quarto (.qmd) - Texto - markdown

  • Markdown é um formato de texto simples projetado para ser fácil de escrever e, ainda mais importante, fácil de ler

  • Quarto é baseado no Pandoc e usa sua variação de markdown como sintaxe de documento

Quarto

Arquivo Quarto (.qmd) - Texto - markdown


### Text formatting
*italic* **bold** ~~strikeout~~ `code`
superscript^2^ subscript~2~
[underline]{.underline} [small caps]{.smallcaps}

### Lists
-   Bulleted list item 1
-   Item 2
    -   Item 2a
    -   Item 2b
1.  Numbered list item 1
2.  Item 2.

### Equations
inline math: $E = mc^{2}$


Text formatting

italic bold strikeout code

superscript2 subscript2

underline small caps

Lists

  • Bulleted list item 1
  • Item 2
    • Item 2a
    • Item 2b
  1. Numbered list item 1
  2. Item 2.

Equations

inline math: \(E = mc^{2}\)

Quarto

Arquivo Quarto (.qmd) - Código - chunk



The _three_ species of penguins have quite distinct 
distributions of physical dimensions (@fig-penguins).

````{r}
#| label: fig-penguins
#| fig-cap: "Dimensions of penguins across three species."
#| warning: false
library(tidyverse, quietly = TRUE)
library(palmerpenguins)
penguins |>
  ggplot(aes(x = flipper_length_mm, y = bill_length_mm)) +
  geom_point(aes(color = species)) +
  scale_color_manual(
    values = c("darkorange", "purple", "cyan4")) +
  theme_minimal()
````

Quarto

Arquivo Quarto (.qmd) - Código - chunk

Quarto

Galeria


Quarto

Quarto e GitHub

Podemos hospedar gratuitamente as saídas do Quarto de forma on-line no GitHub

Repositório > Settings > Pages > GitHub Pages

5. Automação e repetição

Shiny

Descrição

  • Framework do R para criar aplicações web interativas
  • Permite construir dashboards, painéis de visualização, e ferramentas analíticas
  • Totalmente integrado ao R (sem necessidade de HTML/CSS/JS)

Shiny

Exemplo

  • Disponibilização de redes de interação planta-dispersor na Mata Atlântica

Muito obrigado!