10  Utilisation de {renv}

Nous vous conseillons également d’utiliser le package {renv} qui permet d’encapsuler les dépendances de l’application dans le projet.

Ceci permettra à votre application d’être plus stable, embarquant les versions des packages utilisés. Il permettra aussi une meilleure intégration dans l’environnement SK8.

Voir aussi cette présentation (en français) : presentation_renv

A noter que le pipeline SK8 utilise {renv} pour stabiliser l’environnement et les packages utilisés. Si vous l’utilisez en amont, en dehors du pipeline SK8, vous pourrez contrôler quelle version de chaque package (et de ses dépendances) est installée.

Pour utiliser renv, en local sur votre machine :

10.1 Initialiser l’utilisation de {renv}

renv::init()

Cela aura pour effet de créer, entre autre, un répertoire /renv contenant le répertoire /library spécifique à l’application.

Attention il est possible que la première fois, le répertoire /library soit vide. Il suffit alors d’installer les packages requis par votre application, renv devrait vous le proposer.

10.2 Détecter les packages utilisés par votre application

Vous pouvez détecter les packages que vous utilisez en exécutant :

renv::dependencies()

A noter que {renv} ne prendra en compte que ces packages-ci. Ce sont les packages détectés car cités d’une des façons suivantes, dans un fichier source R (*.R, *.Rmd, DESCRIPTION) :

  • library(package)
  • require(package)
  • requireNamespace("package")
  • package::method() (Recommandé dans tout le code R)

Nous vous conseillons d’utiliser systématiquement la dernière forme pour appeler des fonctions externes, cela permet d’avoir une idée claire de l’endroit où sont utilisés les packages.

10.3 Partager votre environnement avec SK8

Pour reproduire votre environnement de développement R sur SK8, il suffit de déposer votre fichier renv.lock dans le dépôt de votre application, à la racine (commit + push).

Avant cela exécuter la commande :

> renv::status()

Il y a plusieurs possibilités :

The project is already synchronized with the lockfile. Tout est OK Vous pouvez commiter le fichier renv.lock.
The following package(s) are installed but not recorded in the lockfile: [...] Un ou plusieurs nouveaux packages ont été installés ET appelés dans le code, mais pas enregistrés dans le renv.lock. Faire renv::snapshot() puis un renv::status()
The following package(s) are no longer used in this project: [...] Un ou plusieurs packages qui étaient dans le renv.lock ne sont plus appelés dans le code mais toujours enregistrés dans le renv.lock. Faire renv::snapshot() puis un renv::status()
The following package(s) are out of sync:: [...] Au moins un package a changé de version. Vous voulez partager ce changement de version avec SK8. Faire renv::snapshot() puis un renv::status()
The following package(s) are out of sync:: [...] Au moins un package a changé de version. Vous préférez revenir à la version précédente. Faire renv::restore() puis un renv::status()

10.4 Cas Bioconductor

Si vous utilisez des packages Bioconductor, il vous sera vous devez ajouter une variable dans le fichier .gitlab-ci-sk8.yml : 'DOCKERFILE_TYPE': "renv+bioc+rshiny" pour que la bonne version de Bioconductor soit prise en compte.