Relatórios reprodutíveis com R

Curso de Verão IME-USP 2022

Ministrante: Beatriz Milz

Introdução ao conceito de reprodutibilidade

  • O que vamos aprender:

    • O que é reprodutibilidade?

    • O que são projetos no RStudio, e qual é a importância de usá-los?

    • O que são caminhos relativos e absolutos?

    • Como desabilitar a funcionalidade do RStudio que armazena automaticamente os objetos e o histórico?

Reprodutibilidade

  • “É um conceito que não tem uma definição única e comum”. (Gundersen, 2021)

  • “Para alguém fazer uma afirmação científica legítima, ele deve ser capaz de reproduzir totalmente seus resultados a partir de seus dados brutos (e de preferência outros devem ser capazes de reproduzi-los também)”. Dr. John Paul Helveston

Reprodutibilidade

Quais fatores contribuem com pesquisa não reprodutível? Fonte: Baker (2016)

Reprodutibilidade

“Reprodutibilidade é como escovar os dentes. Isso é bom para você, mas leva tempo e esforço. Depois de aprender, torna-se um hábito.” - Irakli Loladze, Bryan College of Health Sciences em Lincoln, Nebraska.

Baker, M. 1,500 scientists lift the lid on reproducibility. Nature 533, 452–454 (2016). https://doi.org/10.1038/533452a

Exemplos

  • Boas práticas, como: não usar caracteres especiais nos caminhos, variáveis, nomes de coluna, etc; armazenar os arquivos de forma consistente.

  • Registrar a versão do R e dos pacotes utilizados

  • Documentar a análise

  • Controlar a versão dos arquivos

Outras referências interessantes:

Projetos do RStudio

  • O RStudio permite a criação de Projetos.

  • O projeto é uma pasta no computador, onde devemos armazenar todos os arquivos usados ou criados em uma análise. Essa pasta irá conter também um arquivo com o nome do projeto e a extensão .Rproj.

  • Para cada análise, lembre-se de criar um .Rproj correspondente.

Projetos do RStudio

  • Usar projetos no RStudio facilita a organização dos arquivos, posteriormente sincronizar com o GitHub, entre outros.

Criando um projeto

  • Criando um projeto em uma nova pasta:

    • File > New Project > New Directory > New Project

    • Dê um nome para seu projeto (será o nome da pasta), escolha a pasta no seu computador, e clique em Create Project.

Diretório de trabalho/Working Directory

  • O diretório de trabalho é a pasta em que o R irá:

    • procurar arquivos na hora de ler informações;
    • gravar arquivos na hora de salvar objetos.
  • Quando usamos Projetos do RStudio, o nosso diretório de trabalho é a pasta principal do projeto.

  • A função getwd() serve para conferir o diretório de trabalho:

> getwd()
[1] "/Users/beatrizmilz/GitHub/2023-curso-de-verao-ime-usp-relatorios"
  • A função setwd() serve para alterar o diretório de trabalho. NÃO É RECOMENDADO O USO! Isso torna o código não reprodutível.

Caminhos

  • Caminhos são textos que representam o endereço do arquivo no computador.

  • É muito importante entender como funcionam! Caso contrário, ficará difícil fazer coisas como importar dados para o R.

  • Caminhos podem ser relativos ou absolutos.

  • Caminhos absolutos: tem início na pasta raiz do seu computador/usuário. NÃO É RECOMENDADO O USO! Isso torna o código não reprodutível.

  • Caminhos relativos: tem início no diretório de trabalho da sessão. Caso você esteja usando projetos, os caminhos relativos tem início na pasta inicial do projeto.

  • Utilize sempre que possível caminhos relativos.

Exemplos de caminhos

Exemplos acessando o mesmo arquivo:

  • Caminho absoluto:
"/Users/beatrizmilz/GitHub/2023-curso-de-verao-ime-usp-relatorios/docs/slides/images/rprojs.png"
  • Caminho relativo:
"docs/slides/images/rprojs.png"

O pacote here também possui funções úteis para escrever caminhos:

here::here()
[1] "/home/runner/work/2023-curso-de-verao-ime-usp-relatorios/2023-curso-de-verao-ime-usp-relatorios"

Os arquivos .RData e .Rhistory

  • Em sua configuração padrão, a IDE manterá na “memória” todos os últimos comandos executados, todos os dados utilizados e todos os objetos criados.

  • Ao fechar e abrir o RStudio, essas informações serão recarregadas na memória como se o usuário nunca tivesse saído do programa. Esse recurso é tornado possível pela criação de dois arquivos ocultos: .RData e .Rhistory.

  • O primeiro abriga absolutamente todos os objetos criados por uma sessão R, enquanto o segundo contém uma lista com os últimos comandos executados.

  • Ao reabrir o RStudio, o conteúdo armazenados nestes arquivos será carregado no ambiente de trabalho atual como se nada tivesse acontecido.

  • Leia mais neste capítulo do livro Zen do R

Por que desistir do .RData e .Rhistory

  • Se todos os resultados parciais de uma análise estiverem disponíveis a qualquer momento, diminui o incentivo para a escrita de código reprodutível

  • Ao dependermos ativamente do .Rdata, se acidentalmente sobrescrevemos um objeto relevante e o código para recriá-lo não estiver mais acessível, não haverá nenhuma forma confiável de recuperá-lo.

  • O R trata todos os objetos guardados na memória igualmente. Isso significa que ele também irá armazenar nos arquivos ocultos todas as bases de dados da sessão. Assim, o .RData pode ser um arquivo de múltiplos gigabytes

Como desabilitar .RData e .Rhistory

  • Na barra superior: Tools > Global Options…

Colocar em prática

  1. Crie um projeto no RStudio para armazenar o que vamos criar durante o curso. Salve em algum lugar no seu computador que seja fácil de encontrar.

  2. Desabilite o .RData e .Rhistory no seu RStudio

  3. Execute o seguinte código no console, verifique o resultado: devtools::session_info()

  4. Dentro do projeto criado, crie uma pasta chamada “dados”, e salve o seguinte arquivo na mesma: clique aqui para baixar o arquivo pinguins.csv

Dados originais: https://allisonhorst.github.io/palmerpenguins/

Dados traduzidos para Português: https://cienciadedatos.github.io/dados/

Colocar em prática: Continuação

  1. Crie um R Script, copie e cole o código abaixo, e substitua o caminho correto para ler a base de pinguins. Aproveite que o RStudio nos ajuda a buscar caminhos: dentro das aspas, experimente clicar a tecla TAB.
caminho <- "...." 
pinguins <- readr::read_csv(caminho)
  1. Verifique no painel Environment do RStudio se a base de Pinguins foi importada corretamente.

Exemplo do Session Info

devtools::session_info()
─ Session info ───────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.2.3 (2023-03-15)
 os       Ubuntu 22.04.2 LTS
 system   x86_64, linux-gnu
 ui       X11
 language (EN)
 collate  C.UTF-8
 ctype    C.UTF-8
 tz       UTC
 date     2023-04-10
 pandoc   2.9.2.1 @ /usr/bin/ (via rmarkdown)

─ Packages ───────────────────────────────────────────────────────────────────
 package     * version date (UTC) lib source
 cachem        1.0.7   2023-02-24 [1] RSPM
 callr         3.7.3   2022-11-02 [1] RSPM
 cli           3.6.1   2023-03-23 [1] RSPM
 crayon        1.5.2   2022-09-29 [1] RSPM
 devtools      2.4.5   2022-10-11 [1] any (@2.4.5)
 digest        0.6.31  2022-12-11 [1] RSPM
 ellipsis      0.3.2   2021-04-29 [1] RSPM
 evaluate      0.20    2023-01-17 [1] RSPM
 fastmap       1.1.1   2023-02-24 [1] RSPM
 fs            1.6.1   2023-02-06 [1] RSPM
 glue          1.6.2   2022-02-24 [1] RSPM
 here          1.0.1   2020-12-13 [1] any (@1.0.1)
 htmltools     0.5.5   2023-03-23 [1] any (@0.5.5)
 htmlwidgets   1.6.2   2023-03-17 [1] RSPM
 httpuv        1.6.9   2023-02-14 [1] RSPM
 jsonlite      1.8.4   2022-12-06 [1] RSPM
 knitr         1.42    2023-01-25 [1] RSPM
 later         1.3.0   2021-08-18 [1] RSPM
 lifecycle     1.0.3   2022-10-07 [1] RSPM
 magrittr      2.0.3   2022-03-30 [1] RSPM
 memoise       2.0.1   2021-11-26 [1] RSPM
 mime          0.12    2021-09-28 [1] RSPM
 miniUI        0.1.1.1 2018-05-18 [1] RSPM
 pkgbuild      1.4.0   2022-11-27 [1] RSPM
 pkgload       1.3.2   2022-11-16 [1] RSPM
 prettyunits   1.1.1   2020-01-24 [1] RSPM
 processx      3.8.0   2022-10-26 [1] RSPM
 profvis       0.3.7   2020-11-02 [1] RSPM
 promises      1.2.0.1 2021-02-11 [1] RSPM
 ps            1.7.4   2023-04-02 [1] RSPM
 purrr         1.0.1   2023-01-10 [1] RSPM
 R6            2.5.1   2021-08-19 [1] RSPM
 Rcpp          1.0.10  2023-01-22 [1] RSPM
 remotes       2.4.2   2021-11-30 [1] RSPM
 rlang         1.1.0   2023-03-14 [1] RSPM
 rmarkdown     2.21    2023-03-26 [1] any (@2.21)
 rprojroot     2.0.3   2022-04-02 [1] RSPM
 sessioninfo   1.2.2   2021-12-06 [1] RSPM
 shiny         1.7.4   2022-12-15 [1] RSPM
 stringi       1.7.12  2023-01-11 [1] RSPM
 stringr       1.5.0   2022-12-02 [1] RSPM
 urlchecker    1.0.1   2021-11-30 [1] RSPM
 usethis       2.1.6   2022-05-25 [1] RSPM
 vctrs         0.6.1   2023-03-22 [1] RSPM
 xfun          0.38    2023-03-24 [1] RSPM
 xtable        1.8-4   2019-04-21 [1] RSPM
 yaml          2.3.7   2023-01-23 [1] RSPM

 [1] /home/runner/work/_temp/Library
 [2] /opt/R/4.2.3/lib/R/site-library
 [3] /opt/R/4.2.3/lib/R/library

──────────────────────────────────────────────────────────────────────────────

Revisão - Reprodutibilidade

  • Em um código reprodutível, devemos ser capazes de reproduzir totalmente os resultados a partir dos dados brutos, assim como outras pessoas (em computadores diferentes) também devem ser capazes de reproduzir esses mesmos resultados a partir dos dados brutos.

  • Utilizar boas práticas aumentam as chances de escrever um código reprodutível.

Exemplos de boas práticas:

  • Utilizar Projetos do RStudio. Quando usamos projetos do RStudio, o diretório de trabalho será a pasta principal do projeto.

  • Desabilitar o .Rhistory e .Rdata.

  • Utilizar caminhos relativos.

  • Documentar os pacotes e versões utilizadas.