Garantindo a reprodutibilidade das funções: {renv
}
O pacote Renv
é um pacote para criar ambientes
reprodutíveis em seus projetos de análise no R. A ideia do
Renv
é criar uma biblioteca para salvar os pacotes e as
versões usadas no seu seu workflow de trabalho, de forma que quando você
ou alguém baixa seu repositório inteiro, a biblioteca vem junto com
todos os pacotes. Assim, cada projeto terá sua própria biblioteca!!!
Geralmente a biliboteca do R (um diretório contendo os pacotes
instalados com install.packages()
), é única e guardada em
alguma pasta no seu computador.
Para saber onde está sua biblioteca, dê o comando:
Ao iniciar o Renv
no repositório do seu projeto, você
verá a adição de uma pasta renv/library
onde serão
guardados os pacotes usados.
A grande sacada do {renv
} para garantir a
reprodutibilidade das funções dos pacotes utilizados é que ele instala
estas dependências numa pasta específica do projeto que contém tais
dependência. Desta forma, ao utilizar um projeto de outra pessoa, ou o
seu próprio projeto no futuro, você irá utilizar as mesmas versões dos
pacotes.
{renv
} na prática
Quatro funções são essenciais para utilizar o pacote
{renv
}. Lembre-se sempre faça isso dentro de um
projeto
renv::init()
primeira ação a ser realizada para
iniciar o uso do pacote no seu projeto.
renv::status()
confere o status das dependências
contidas no seu projeto
renv::snapshot()
utilize essa função toda vez que
instalar um pacote novo, isso garantirá que a versão deste pacote estará
registrada nos arquivos especiais criados pelo
{renv
}
renv::restore()
esta função é utilizada quando você
quiser reproduzir algum projeto. Por exemplo, ao baixar um projeto do
GitHub abra a imagem do Rproject e utilize a função
restore()
isso irá desencadear a instalação das versões dos
pacotes utilizadas no projeto em seu computador, garantindo assim a
reprodutibilidade
Garantindo a reprodutibilidade das funções:
{groundhog
}
Outra opção é o ótimo pacote {groundhog
}, que exerce
funções similares ao renv
mas, tecnicamente, de maneiras
distintas. O objetivo final é o mesmo, aumentar a chance de
reprodutibilidade de códigos em R ao resolver a compatibilidade de
versões de pacotes estatísticos utilizados nestes scripts.
A grande diferença entre o pacote {renv
} e o
{groundhog
} é o fato de que o segundo funciona isoladamente
em scripts, enquanto o primeir, necessariamente, faz uso dos projetos no
R.
{groundhog
} na prática
Para utilizar o {groundhog
} devemos chamar as
dependências (pacotes) utilizando uma função do groundhog da seguinte
maneira
library(groundhog)
groundhog.day="2020-11-01"
pkgs=c('pwr','metafor','data.tables')
groundhog.library(pkgs, groundhog.day)
Ou seja, utilizamos dois argumentos na função
groundhog.library
um indicando os pacotes que devem ser
carregados e um segundo, aí a grande diferença do groundhog, indicando
uma data de uso do pacote. Esta data funcionará para baixar a versão do
pacote mais recente tendo como referência a data indicada.
Exercício
Tente as duas formas de ler pacotes apresentadas nesta seção, veja o
que mudou (ou não) no seu diretório.
Leituras adicionais
Para mais informações sobre o pacote {renv
} veja este material.
Para mais informações sobre o {groundhog
} veja o blog escrito por um
dos desenvolvedores do pacote. A propósito, o blog Data Colada é uma fonte sensacional
de ideias e discussões sobre ciência, reprodutibilidade e tudo o
mais.
LS0tDQp0aXRsZTogIkFtYmllbnRlIHJlcHJvZHV0w612ZWwgY29tICdSZW52JyINCmF1dGhvcjogIk1lbGluYSBMZWl0ZSBlIEdhYnJpZWwgTmFrYW11cmEiDQpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiDQpvdXRwdXQ6IGh0bWxfZG9jdW1lbnQNCi0tLQ0KDQojIENvbXBhdGliaWxpZGFkZSBjb20gcGFjb3Rlcw0KDQpBdMOpIGFnb3JhIGFwcmVuZGVtb3MgY29tbyByZWR1emlyIG9zIGVycm9zIGNvbXVucyBkZSByZXByb2R1dGliaWxpZGFkZSBjb21wdXRhY2lvbmFsIGFzc29jaWFkb3MgYSBhcnF1aXZvcyBwcmVzZW50ZXMgbm8gbm9zc28gZGlyZXTDs3Jpby4gUG9yw6ltLCBuYSBtYWlvcmlhIGRvcyBwcm9qZXRvcyBuw6NvIHV0aWxpemFtb3MgYXBlbmFzIGFycXVpdm9zIHF1ZSBlc3TDo28gcHJlc2VudGVzIG5vIGRpcmV0w7NyaW8gbG9jYWwgb3UgcmVtb3RvLCBwb3IgZXhlbXBsbywgb3MgcGFjb3RlcyENCg0KT3MgcGFjb3RlcyBzw6NvIGRpc3BvbmliaWxpemFkb3MgYWJlcnRhbWVudGUgZSBvIHF1ZSBmYXplbW9zIMOpIGJhaXhhciB1bWEgdmVyc8OjbyBkZXN0ZSBwYWNvdGUgZW0gbm9zc28gY29tcHV0YWRvci4gUG9yw6ltLCBwYWNvdGVzIG5lbSBzZW1wcmUgKG91IGEgbWFpb3JpYSBkYXMgdmV6ZXMpLCBmaWNhbSBkYSBtYW5laXJhIGNvbW8gb3MgYmFpeGFtb3MuIFBhY290ZXMgc8OjbyBlZGl0YWRvcyBwb3Igc2V1cyBwcm9wb25lbnRlcywgZnVuw6fDo28gaW50ZXJuYXMgc8OjbyBjb3JyaWdpZGFzLCBhbGd1bWFzIHPDo28gZXhjbHXDrWRhcywgb3V0cmFzIGFkaWNpb25hZGFzIGUgYWxndW1hcyB2ZXplcyBhdMOpIG1lc21vIG8gbm9tZSBkYSBmdW7Dp8OjbyDDqSBtb2RpZmljYWRvLiBNYXMgY29tbyBjb25zZWd1aW1vcyBnYXJhbnRpciBxdWUgbm9zc28gY8OzZGlnbyBzZWphIHJlcHJvZHV0w612ZWwsIHF1YW5kbyBlbGUgZGVwZW5kZSBkZSB1bWEgb3V0cmEgcGVzc29hIGF0dWFsaXphbmRvIGZ1bsOnw7VlcyBlIGRlcGVuZMOqbmNpYXMgbm9zIG5vc3NvcyBzY3JpcHRzPyBVbWEgZGFzIHNvbHXDp8O1ZXMgw6kgbyBwYWNvdGUge2ByZW52YH0NCg0KIyBHYXJhbnRpbmRvIGEgcmVwcm9kdXRpYmlsaWRhZGUgZGFzIGZ1bsOnw7Vlczoge2ByZW52YH0NCg0KTyBwYWNvdGUgYFJlbnZgIMOpIHVtIHBhY290ZSBwYXJhIGNyaWFyIGFtYmllbnRlcyByZXByb2R1dMOtdmVpcyBlbSBzZXVzIHByb2pldG9zIGRlIGFuw6FsaXNlIG5vIFIuIEEgaWRlaWEgZG8gYFJlbnZgIMOpIGNyaWFyIHVtYSBiaWJsaW90ZWNhIHBhcmEgc2FsdmFyIG9zIHBhY290ZXMgZSBhcyB2ZXJzw7VlcyB1c2FkYXMgbm8gc2V1IHNldSB3b3JrZmxvdyBkZSB0cmFiYWxobywgZGUgZm9ybWEgcXVlIHF1YW5kbyB2b2PDqiBvdSBhbGd1w6ltIGJhaXhhIHNldSByZXBvc2l0w7NyaW8gaW50ZWlybywgYSBiaWJsaW90ZWNhIHZlbSBqdW50byBjb20gdG9kb3Mgb3MgcGFjb3Rlcy4gQXNzaW0sIGNhZGEgcHJvamV0byB0ZXLDoSBzdWEgcHLDs3ByaWEgYmlibGlvdGVjYSEhIQ0KDQpHZXJhbG1lbnRlIGEgYmlsaWJvdGVjYSBkbyBSICh1bSBkaXJldMOzcmlvIGNvbnRlbmRvIG9zIHBhY290ZXMgaW5zdGFsYWRvcyBjb20gYGluc3RhbGwucGFja2FnZXMoKWApLCDDqSDDum5pY2EgZSBndWFyZGFkYSBlbSBhbGd1bWEgcGFzdGEgbm8gc2V1IGNvbXB1dGFkb3IuDQoNClBhcmEgc2FiZXIgb25kZSBlc3TDoSBzdWEgYmlibGlvdGVjYSwgZMOqIG8gY29tYW5kbzoNCg0KYGBge3IsIGV2YWw9Rn0NCi5saWJQYXRocygpDQpgYGANCg0KQW8gaW5pY2lhciBvIGBSZW52YCBubyByZXBvc2l0w7NyaW8gZG8gc2V1IHByb2pldG8sIHZvY8OqIHZlcsOhIGEgYWRpw6fDo28gZGUgdW1hIHBhc3RhIGByZW52L2xpYnJhcnlgIG9uZGUgc2Vyw6NvIGd1YXJkYWRvcyBvcyBwYWNvdGVzIHVzYWRvcy4NCg0KWyFbRXNxdWVtYSBkZSBmdW5jaW9uYW1lbnRvIGRvIFJlbnYgcmV0aXJhZG8gZGEgdmluaGV0YSBkbyBwYWNvdGUuXShmaWdzL3JlbnZfc2NoZW1lLnBuZyldKGh0dHBzOi8vcnN0dWRpby5naXRodWIuaW8vcmVudi9hcnRpY2xlcy9yZW52Lmh0bWwpDQoNCkEgZ3JhbmRlIHNhY2FkYSBkbyB7YHJlbnZgfSBwYXJhIGdhcmFudGlyIGEgcmVwcm9kdXRpYmlsaWRhZGUgZGFzIGZ1bsOnw7VlcyBkb3MgcGFjb3RlcyB1dGlsaXphZG9zIMOpIHF1ZSBlbGUgaW5zdGFsYSBlc3RhcyBkZXBlbmTDqm5jaWFzIG51bWEgcGFzdGEgZXNwZWPDrWZpY2EgZG8gcHJvamV0byBxdWUgY29udMOpbSB0YWlzIGRlcGVuZMOqbmNpYS4gRGVzdGEgZm9ybWEsIGFvIHV0aWxpemFyIHVtIHByb2pldG8gZGUgb3V0cmEgcGVzc29hLCBvdSBvIHNldSBwcsOzcHJpbyBwcm9qZXRvIG5vIGZ1dHVybywgdm9jw6ogaXLDoSB1dGlsaXphciBhcyBtZXNtYXMgdmVyc8O1ZXMgZG9zIHBhY290ZXMuDQoNCiMjIHtgcmVudmB9IG5hIHByw6F0aWNhDQoNClF1YXRybyBmdW7Dp8O1ZXMgc8OjbyBlc3NlbmNpYWlzIHBhcmEgdXRpbGl6YXIgbyBwYWNvdGUge2ByZW52YH0uIExlbWJyZS1zZSAqKnNlbXByZSBmYcOnYSBpc3NvIGRlbnRybyBkZSB1bSBwcm9qZXRvKioNCg0KMS4gYHJlbnY6OmluaXQoKWAgcHJpbWVpcmEgYcOnw6NvIGEgc2VyIHJlYWxpemFkYSBwYXJhIGluaWNpYXIgbyB1c28gZG8gcGFjb3RlIG5vIHNldSBwcm9qZXRvLiANCg0KMi4gYHJlbnY6OnN0YXR1cygpYCBjb25mZXJlIG8gc3RhdHVzIGRhcyBkZXBlbmTDqm5jaWFzIGNvbnRpZGFzIG5vIHNldSBwcm9qZXRvDQoNCjMuIGByZW52OjpzbmFwc2hvdCgpYCB1dGlsaXplIGVzc2EgZnVuw6fDo28gdG9kYSB2ZXogcXVlIGluc3RhbGFyIHVtIHBhY290ZSBub3ZvLCBpc3NvIGdhcmFudGlyw6EgcXVlIGEgdmVyc8OjbyBkZXN0ZSBwYWNvdGUgZXN0YXLDoSByZWdpc3RyYWRhIG5vcyBhcnF1aXZvcyBlc3BlY2lhaXMgY3JpYWRvcyBwZWxvIHtgcmVudmB9DQoNCjQuIGByZW52OjpyZXN0b3JlKClgIGVzdGEgZnVuw6fDo28gw6kgdXRpbGl6YWRhIHF1YW5kbyB2b2PDqiBxdWlzZXIgcmVwcm9kdXppciBhbGd1bSBwcm9qZXRvLiBQb3IgZXhlbXBsbywgYW8gYmFpeGFyIHVtIHByb2pldG8gZG8gR2l0SHViIGFicmEgYSBpbWFnZW0gZG8gUnByb2plY3QgZSB1dGlsaXplIGEgZnVuw6fDo28gYHJlc3RvcmUoKWAgaXNzbyBpcsOhIGRlc2VuY2FkZWFyIGEgaW5zdGFsYcOnw6NvIGRhcyB2ZXJzw7VlcyBkb3MgcGFjb3RlcyB1dGlsaXphZGFzIG5vIHByb2pldG8gZW0gc2V1IGNvbXB1dGFkb3IsIGdhcmFudGluZG8gYXNzaW0gYSByZXByb2R1dGliaWxpZGFkZQ0KDQoNCiMgR2FyYW50aW5kbyBhIHJlcHJvZHV0aWJpbGlkYWRlIGRhcyBmdW7Dp8O1ZXM6IHtgZ3JvdW5kaG9nYH0NCg0KT3V0cmEgb3DDp8OjbyDDqSBvIMOzdGltbyBwYWNvdGUge2Bncm91bmRob2dgfSwgcXVlIGV4ZXJjZSBmdW7Dp8O1ZXMgc2ltaWxhcmVzIGFvIGByZW52YCBtYXMsIHRlY25pY2FtZW50ZSwgZGUgbWFuZWlyYXMgZGlzdGludGFzLiBPIG9iamV0aXZvIGZpbmFsIMOpIG8gbWVzbW8sIGF1bWVudGFyIGEgY2hhbmNlIGRlIHJlcHJvZHV0aWJpbGlkYWRlIGRlIGPDs2RpZ29zIGVtIFIgYW8gcmVzb2x2ZXIgYSBjb21wYXRpYmlsaWRhZGUgZGUgdmVyc8O1ZXMgZGUgcGFjb3RlcyBlc3RhdMOtc3RpY29zIHV0aWxpemFkb3MgbmVzdGVzIHNjcmlwdHMuDQoNCkEgZ3JhbmRlIGRpZmVyZW7Dp2EgZW50cmUgbyBwYWNvdGUge2ByZW52YH0gZSBvIHtgZ3JvdW5kaG9nYH0gw6kgbyBmYXRvIGRlIHF1ZSBvIHNlZ3VuZG8gZnVuY2lvbmEgaXNvbGFkYW1lbnRlIGVtIHNjcmlwdHMsIGVucXVhbnRvIG8gcHJpbWVpciwgbmVjZXNzYXJpYW1lbnRlLCBmYXogdXNvIGRvcyBwcm9qZXRvcyBubyBSLg0KDQojIyB7YGdyb3VuZGhvZ2B9IG5hIHByw6F0aWNhDQoNClBhcmEgdXRpbGl6YXIgbyB7YGdyb3VuZGhvZ2B9IGRldmVtb3MgY2hhbWFyIGFzIGRlcGVuZMOqbmNpYXMgKHBhY290ZXMpIHV0aWxpemFuZG8gdW1hIGZ1bsOnw6NvIGRvIGdyb3VuZGhvZyBkYSBzZWd1aW50ZSBtYW5laXJhDQoNCmBgYHtyIGVjaG89VFJVRSwgZXZhbD1GQUxTRX0NCmxpYnJhcnkoZ3JvdW5kaG9nKQ0KZ3JvdW5kaG9nLmRheT0iMjAyMC0xMS0wMSINCnBrZ3M9YygncHdyJywnbWV0YWZvcicsJ2RhdGEudGFibGVzJykNCmdyb3VuZGhvZy5saWJyYXJ5KHBrZ3MsIGdyb3VuZGhvZy5kYXkpDQpgYGANCg0KT3Ugc2VqYSwgdXRpbGl6YW1vcyBkb2lzIGFyZ3VtZW50b3MgbmEgZnVuw6fDo28gYGdyb3VuZGhvZy5saWJyYXJ5YCB1bSBpbmRpY2FuZG8gb3MgcGFjb3RlcyBxdWUgZGV2ZW0gc2VyIGNhcnJlZ2Fkb3MgZSB1bSBzZWd1bmRvLCBhw60gYSBncmFuZGUgZGlmZXJlbsOnYSBkbyBncm91bmRob2csIGluZGljYW5kbyB1bWEgZGF0YSBkZSB1c28gZG8gcGFjb3RlLiBFc3RhIGRhdGEgZnVuY2lvbmFyw6EgcGFyYSBiYWl4YXIgYSB2ZXJzw6NvIGRvIHBhY290ZSBtYWlzIHJlY2VudGUgdGVuZG8gY29tbyByZWZlcsOqbmNpYSBhIGRhdGEgaW5kaWNhZGEuDQoNCiMgRXhlcmPDrWNpbw0KDQpUZW50ZSBhcyBkdWFzIGZvcm1hcyBkZSBsZXIgcGFjb3RlcyBhcHJlc2VudGFkYXMgbmVzdGEgc2XDp8OjbywgdmVqYSBvIHF1ZSBtdWRvdSAob3UgbsOjbykgbm8gc2V1IGRpcmV0w7NyaW8uDQoNCiMgTGVpdHVyYXMgYWRpY2lvbmFpcw0KDQpQYXJhIG1haXMgaW5mb3JtYcOnw7VlcyBzb2JyZSBvIHBhY290ZSB7YHJlbnZgfSB2ZWphIGVzdGUgW21hdGVyaWFsXShodHRwczovL3JlcHJvZHVjaWJpbGl0eS5yb2Nrcy9tYXRlcmlhbHMvZGF5My8wMS1yZW52LykuIFBhcmEgbWFpcyBpbmZvcm1hw6fDtWVzIHNvYnJlIG8ge2Bncm91bmRob2dgfSB2ZWphIG8gW2Jsb2ddKGh0dHBzOi8vZGF0YWNvbGFkYS5vcmcvOTUjZm9vdG5vdGVfMl81ODUyKSBlc2NyaXRvIHBvciB1bSBkb3MgZGVzZW52b2x2ZWRvcmVzIGRvIHBhY290ZS4gQSBwcm9ww7NzaXRvLCBvIGJsb2cgW0RhdGEgQ29sYWRhXShodHRwczovL2RhdGFjb2xhZGEub3JnLykgw6kgdW1hIGZvbnRlIHNlbnNhY2lvbmFsIGRlIGlkZWlhcyBlIGRpc2N1c3PDtWVzIHNvYnJlIGNpw6puY2lhLCByZXByb2R1dGliaWxpZGFkZSBlIHR1ZG8gbyBtYWlzLg0KDQo=