Ajouter du code R

TP

Auteur·rice·s
Affiliation

Ghislain Durif

Frédéric Santos

CNRS, Univ. Bordeaux, MCC – UMR 5199 PACEA

Une fois le squelette du package obtenu, ajoutons un premier bout de code R à l’intérieur !

1 Où et comment ajouter du code R ?

Comme indiqué précédemment, le code R qui implémentera les fonctionnalités du package devra consister en des fichiers source .R qui “vivront” dans le dossier R/ du package. Ces fichiers devront contenir des fonctions qui, si elles sont exportées, pourront être directement appelées par les utilisateurs du package.

Techniquement, il peut donc suffire de créer un nouveau fichier source .R, d’y ajouter du code R sous forme de fonctions, et d’enregistrer ce fichier dans le dossier R/ de votre package. Cette approche est parfaitement valable !

Néanmoins, nous allons là encore tirer profit du package {usethis}, et plus précisément de la fonction use_r(), pour faciliter l’ajout de code R dans le package.

2 Une fonction ccc() pour le coefficient de concordance

Nous allons commencer par écrire et inclure dans le package une fonction que nous nommerons ccc(), et qui implémentera de façon simple le coefficient de concordance (Lin 1989).

2.1 Formule mathématique du coefficient de concordance

Cet indicateur (compris entre 0 et 1) est dédié à quantifier l’accord entre deux séries d’observations sur une variable numérique continue (par exemple, en ostéologie, la longueur ou le diamètre d’un os).

Comme l’indique la page Wikipedia correspondante, la formule mathématique du coefficient de concordance \(\hat{\rho}_c\) entre deux séries d’observation \(x := (x_1, \ldots, x_n)\) et \(y := (y_1, \ldots, y_n)\) est la suivante :

\[ \hat{\rho}_c := \frac{2 \, cov(x,y)}{var(x) + var(y) + (\bar{x} - \bar{y})^2} \tag{1}\]

2.2 Implémentation en R

Exercice. Implémenter l’Équation 1 en R en suivant les étapes ci-dessous :

  1. Dans la console R, exécuter l’instruction suivante :

    use_r("ccc")

    Cela créera automatiquement un fichier source ccc.R dans le dossier R/ du package, déjà prêt pour l’édition.

  2. Écrire le code R d’une fonction ccc() correspondant à la formule du coefficient de concordance.

  3. Enregistrer le fichier.

Le fichier source est maintenant rempli et enregsitré au bon endroit, mais à présent, comment utiliser cette fonction ccc() et en tester le bon fonctionnement ?

Nous pourrions évidemment taper quelque chose comme ceci dans la console R :

source("./R/ccc.R")

et tester ensuite le bon fonctionnement de cette fonction ccc(), toujours dans la console R. À ce stade de développement d’un package, ce serait une solution envisageable et tout-à-fait correcte, mais qui passerait mal à l’échelle : lorsque le package contiendra plusieurs dizaines de fichiers .R interdépendants, tester une fonction donnée nécessitera de sourcer successivement l’ensemble des fichiers du dossier R/, à chaque fois. Il ne s’agit donc pas d’une solution très confortable ni très optimale. La fonction load_all() du package {devtools} va apporter une solution efficace à ce problème1.

3 La fonction load_all()

Dans le contexte du développement d’un package R, exécuter la fonction load_all() dans la console R permet notamment :

  • de sourcer l’ensemble des fonctions contenues dans le dossier R/ du package ;
  • de charger en mémoire l’ensemble des dépendances nécessaire (les autres packages R déclarés comme dépendance, etc.).

Cette fonction permet donc de simuler ce qui se passerait en installant et chargeant en mémoire notre package en cours de développement (mais sans l’installer réellement !).

Exercice. Exécuter le code suivant dans la console R afin de vérifier le bon fonctionnement de la fonction ccc() :

library(devtools)

## Charger toutes les fonctions :
load_all()

## Vérifier que ccc() fonctionne :
set.seed(2024)
x <- runif(n = 20, min = 10, max = 20)
y <- x + rnorm(20)
ccc(x, y)

Quel résultat obtenez-vous ?

Retour au sommet

Références

Lin, Lawrence. 1989. « A Concordance Correlation Coefficient to Evaluate Reproducibility ». Biometrics 45 (1): 255. https://doi.org/10.2307/2532051.

Notes de bas de page

  1. Plus généralement, il sera d’ailleurs absolument interdit d’inclure des appels à la fonction source() dans le code R d’un package. Comme nous le verrons plus tard, ce n’est pas ainsi que se gèrent les dépendances entre les différentes fonctions R d’un package.↩︎