Nesse tutorial, vamos explorar duas ferramentas para apoiar a reprodutibilidade.

  1. Git e Github - ferramentas para fazer backups, controle de versões e divulgação dos seus scripts
  2. Checkpoint - um pacote de R que garante que as funções/bibliotecas que você usa estejam disponíveis para outras pessoas sem conflitos

Git, Github e RStudio

1- Comece criando uma conta no github: https://github.com/. Github é um serviço web-based de controle de versão, que utiliza o software de código aberto git.

2- A seguir, instale git no seu computador. Para Windowns, use o url: https://git-scm.com/download/win

3- Opcionalmente, você pode instalar o Github Desktop em seu computador. Não utilizaremos em sala de aula, mas é uma ferramenta interessante: https://desktop.github.com/

Trabalhando com Git

4- Existem milhões de repositórios online, com o código de outras pessoas. Podemos copiar qualquer repositório e gerar uma cópia exata em nossa própria conta. Isso se chama um “fork” em git. Vá para sua conta no github e faça login. Vamos para o repositório: https://github.com/leobarone/repositorio_clone e clicar em “Fork”.

5- O git nos permitem baixar um repositório que existe em nossa conta online para o nosso computador local. Isso se chama um “clone” em git. Vá para sua própria conta no github, abre o repositório que já ‘forcamos’ e clicar em “Clone or download” e copiar o link que aparece. Depois, abre RStudio e vamos ‘clonar’ este repositório: File -> New Project -> Version Control -> Git e escolha o nome e a pasta onde o repositório será baixado no seu computador.

  1. Na aba ‘files’ em RStudio agora aparece a lista de arquivos no repositório. Crie um novo script do R e salve na mesma pasta do repositório.

7- Neste arquivo, coloca o código seguinte para abrir os dados e produza um gráfico. Salvar com nome de “teste.R”.

library(tidyverse)
dados <- read.csv("~/repositorio_clone/dados.csv")

dados %>% ggplot() + geom_density(aes(idade))

8- Vá para o repositório na sua conta no github - veja que o arquivo ‘teste.Rmd’ não está presente e só fica no seu computador local. Para sincronizar e ‘atualizar’ o repositório do github com as nossa mudanças locais, temos que fazer o seguinte:

8a- “Add” todos os arquivos novos para o nosso fluxo de trabalho. Na aba ‘Git’ em RStudio, clicar o checkbox ao lado de cada arquivo que você quer atualizar. O ‘Status’ vai mudar para “A”. Cada vez que você ajuste um arquivo do repositório local, o arquivo vai aparecer na lista nesta aba do Git.

8b- “Commit” um conjunto de arquivos que você mudou como uma contribuição integral. Clicar ‘Commit’ na aba de Git e vai abrir uma caixa que mostra todas as diferenças entre o nosso código local e o código no github online: aditivos em verde e remoções em vermalha. A única coisa que temos que fazer nessa caixa é adicionar um mensagen que descreve o conteúdo da mudança que será realizada com o novo código, e clicar em ‘Commit’.

8c- “Push” os seus commits pendentes para o repositório online do github. Feche a caixa e deve ver que a aba de Git está vazia com a notícia de “Your branch is ahead of ‘origin/master’ by 1 commit”. Isso significa que ao seu novo script foi cadastrado no fluxo de trabalho do projeto, mas ainda não foi sincronizado online. Para sincronizar, finalmente clicaos ‘Push’ na aba ‘Git’ em RStudio (a seta verde).

9- Agora vá para o repositório na sua conta no github, refresh a página, e confirme que o novo arquivo ‘teste.R’ aparece.

Exercício - Criando um novo repositório/projeto

10- Criar um repositório novo diretamente no github (explore o site, na aba ‘repositories’). Lembre-se de clicar em ‘Initialize this repository with a README’.

11- Clonar o seu repositório.

12- Editar o README. Pode usar a língua de Rmarkdown que você já conhece.

13- Adicionar 2 novos arquivos de sua escolha.

14- Add, commit e push para sincronizar as mudanças locais com o repositório online.

Git e Colaboração

O poder do Git e Github é bem mais óbvio quando colobarando com colegas e tudo mundo pode contribuir melhorias ao código. Mas isso também gera o potencial para conflitos entre mudanças. Para evitar isso, é sempre uma boa prática fazer um ‘pull’ (a seta azul na aba Git em RStudio) antes de começar mexendo nos documentos, e com certeza antes de fazer em push. Isso vai trazer todas as contribuições das suas colegas para o seu computador local.

Checkpoint

O que vai acontecer se mandamos o nosso script ou arquivo de R Markdown para uma colega? Vai funciona? Será reprodutível? Freqüentemente não. Mesmo que eles tem exatamente os mesmos arquivos e usa a mesma versão de R e RStudio, não podemos garantir que eles terão acesso às mesmas funções que usamos para fazer nosso script. Lembre-se que tivemos que instalar cada um dos nossos pacotes (install.packages()) - se o receptor não tiver feito o mesmo ou tiver uma versão diferente de um pacote, nosso código vai quebrar.

Para resolver isso, podemos usar o pacote checkpoint para garantir reprodutibilidade de pacotes. Num site online, o checkpoint salva cada dia todos os pacotes disponível em R (de CRAN). Nós só precisamos escolher uma data para o nosso código para que ele use o conjunto consistente de pacotes salvos nessa data sempre que o código seja executado. Como aproveitamos? Apenas coloque o seguinte código (com sua data preferida) no início do seu código:

install.packages("checkpoint")
library(checkpoint)
checkpoint("2018-04-19")

Desde que o checkpoint vai salvar uma copia dos pacotes localmente, funciona melhor dentro de um projeto de R.