Questão:
Reprodutibilidade final em R?
Peter
2017-08-31 19:06:02 UTC
view on stackexchange narkive permalink

Estou procurando uma maneira conveniente e confiável de tornar reproduzível uma análise R, seja em momentos diferentes ou entre colaboradores.

Listando as versões do pacote ou sessionInfo () a saída não é muito útil, pois deixa a tarefa de recriar o ambiente inteiramente para você.

Como vejo, para tornar a análise reproduzível, o seguinte deve ser o mesmo:

  • o ambiente R (R, repos (Biocondutor), pacotes e talvez RStudio)
  • dados
  • código
  • semente para processos aleatórios: set.seed()

Vou postar uma resposta, mas gostaria de ouvir sobre outras opções.

tl; dr: ** Atualmente * não há maneira * de fazer isso no R. ** packrat chega perto, mas no final das contas fica aquém, porque só suporta o carregamento de * uma versão * por pacote, mas pacotes diferentes podem compartilhar a mesma dependência, mas requerem versões diferentes. R precisa de algo como Ruby’s Bundler. Estou planejando trabalhar nisso, mas não funcionará com pacotes devido a limitações arquitetônicas fundamentais.
Quatro respostas:
James Hawley
2017-08-31 20:35:46 UTC
view on stackexchange narkive permalink

Você está certo sobre tentar fazer com que os ambientes R sejam o mais semelhantes possível, o mais facilmente possível. Nem sempre é necessário ter o ambiente exato para obter os mesmos resultados, mas definitivamente ajuda se você estiver lutando para replicar os resultados.

Dicas gerais para garantir a reprodutibilidade, não específicas para R

Veja Sandve et al. , PLoS Comp Bio, 2013. Eles mencionam uma série de coisas que você faz, como registrar os valores iniciais e as informações da sessão. Vou destacar alguns pontos:

  1. Ambiente : inclui um pequeno script que lista todas as dependências necessárias
    • Isso deve incluir todos os números de versão de idiomas e pacotes usados ​​
    • Melhor implementação : torne-o um script que instala dependências automaticamente
  2. Dados : Compartilhe dados brutos e / ou processados ​​sempre que possível
    • No mínimo, detalhes sobre como obter os dados que você usou
    • Este pode ser um número de acesso em um banco de dados ou um link para o material de origem
    • Melhor implementação : novamente, torne-o um script que baixa automaticamente os dados brutos que você usou
  3. Código : comente e documente seu código
    • As pessoas (incluindo você) precisam entender o que você fez e por quê
    • Além disso, seu trabalho pode ser reproduzível, mas pode não estar correto. Se você (ou qualquer outra pessoa) tentar consertar um problema em seu código, eles terão dificuldade em fazer isso se não puderem entender o que seu código está fazendo
  4. Código : Use o controle de versão
    • Serviços como GitHub e BitBucket simplificam o compartilhamento exato de seu trabalho com os colaboradores
    • O controle de versão também garante que você tenha um histórico de todas as mudanças feitas em seu trabalho
  5. Sem manipulação manual de dados
    • Se algo for feito em seus dados, anote

Dicas específicas de R

  1. O pacote packrat , como você mencionou em sua resposta
  2. Usando várias funções personalizadas para analisar seus dados? Compilar essas funções em um pacote R
    • Permite que outros carreguem / descarreguem facilmente as funções exatas que você usou por meio de ferramentas como CRAN, BioConductor ou devtools::install_github()
    • Torna mais fácil ver se essas funções estão funcionando conforme o planejado, uma vez que são separadas de outras partes da análise
  3. Faça testes de unidade para seu trabalho com o testthat package
    • Ajuda a garantir que seu código está funcionando conforme planejado e dá aos outros confiança em seu trabalho também
    • Escreva os testes usando testthat :: test_that () , e verifique se eles passam usando R CMD check ou devtools::check()
    • Isso funciona especialmente bem com Pacotes R
    • Isso também funciona especialmente bem com o TravisCI, já que você pode ter seu código testado automaticamente depois de alterá-lo e fazer um commit
  4. Considere imagens do Docker para o seu ambiente
    • Isso agrupa tudo sobre o R ambiente juntos em uma imagem facilmente executável (e não está limitada apenas a R)
    • Essas imagens podem ser facilmente compartilhadas por meio do Docker Hub
    • Nota esta pode nem sempre ser a melhor solução, já que poucas pessoas conhecem o Docker e nem sempre é fácil de usar. O Docker também requer privilégios de administrador, o que pode não ser possível para trabalhar em clusters de computador
    • Atualmente, há muita discussão sobre o Docker na ciência. Veja Boettiger, 2014, para um exemplo, usando R
Se você usa Docker, Bioconductor tem [imagens também] (https://www.bioconductor.org/help/docker/).
Sebastian Müller
2017-09-09 19:52:58 UTC
view on stackexchange narkive permalink

Outra opção que estou tentando no momento é a combinação de snakemake, conda.io e knitr.

  • Conda é um "Gerenciamento de pacote, dependência e ambiente para qualquer linguagem" e pode ser usado para configurar o R-ambiente , bem como outro software. Observe que a maioria dos softwares de bioinformática podem ser encontrados no projeto bioconda relacionado.

  • Snakemake é um sistema de gerenciamento de fluxo de trabalho, que pode ser usado para automatizar o pré-processamento de seus dados de forma reproduzível (também funciona bem com o conda já que ambientes conda podem ser especificados no Snake-Makefile)

  • Knitr para geração de relatórios dinâmicos com R. Bem adequado para documentar e reproduzir seu fluxo de trabalho R em relatórios, marcando seu code e seed boxes Budap.

como o snakemake está funcionando bem com conda, no que diz respeito a sistemas mais "tradicionais" como Makefiles?
@mgalardini Eu li como "é instalável e funciona se for instalado via conda".
Existem diretivas dedicadas para conda no Snakefile. Mudei o texto para ficar mais claro. Também dê uma olhada [aqui] (https://snakemake.readthedocs.io/en/stable/tutorial/additional_features.html#automatic-deployment-of-software-dependencies) para mais informações
Peter
2017-08-31 19:06:02 UTC
view on stackexchange narkive permalink

Uma maneira de conseguir isso é por meio do packrat , um sistema de gerenciamento de dependências desenvolvido pela RStudio.

Configuração:

1) Criar projeto

2) Crie um script no diretório do projeto para iniciar o RStudio com a versão R específica:

  export RSTUDIO_WHICH_R = / path / to / Rrstudio  

3) Traga o projeto sob o controle de packrat . Instale o biocondutor, instale os pacotes ...


Cada vez que você trabalhar no projeto, execute o script acima no diretório do projeto. https://github.com/rstudio/packrat/issues / 342 # issuecomment-315059897

agapow
2017-09-12 14:12:10 UTC
view on stackexchange narkive permalink

checkpoint é um sistema para garantir que você obtenha pacotes com o mesmo horário / versão. No entanto, confesso que não usei e, portanto, não posso garantir.

Meu sentimento é que o resto terá que ser tratado fora disso: o código e os dados podem ser controlados em git (e dat). Uma solução completa pode ter o uso de algo como docker, como outros sugeriram.



Estas perguntas e respostas foram traduzidas automaticamente do idioma inglês.O conteúdo original está disponível em stackexchange, que agradecemos pela licença cc by-sa 3.0 sob a qual é distribuído.
Loading...