Packaging et test
Un package est un projet (.Rproj) versionné usethis::use_git(). On peut contrôler l’environnement avec {renv}.
Sur windows il faut installer RTools (la même version que celle de R).
Créer un package
usethis::create_package("~/path/to/mypkg").Rbuildignoreliste des fichiers ignorés pour le build.gitignoreDESCRIPTIONpackage metadataNAMESPACEimport et export des fonctionsRmain foldermypkg.Rproj
Versionning
usethis::use_git()Écrire des fonctions
usethis::use_r(name)Les fonctions sont définies dans des fichiers R/name.R.
devtools::load_all()Dépendances
On doit spécifier les packages qui sont utilisés.
usethis::use_package('ggplot2')Ils sont ajoutés dans le fichier DESCRIPTION dans la section Import (ou Suggests par exemple).
Pour prévoir la documentation, il est essentiel d’utiliser roxygen2 (Code > Insert Roxygen Skeleton).
#' Add together two numbers
#'
#' @param x A number.
#' @param y A number.
#' @returns A numeric vector.
#' @examples
#' add(1, 1)
#' add(10, 1)
#' @export
add <- function(x, y) {
x + y
}@exportpermet l’export dans le NAMESPACE@inherisParamspermet de récupérer la description des paramètres depuis une autre fonction- voir la doc pour la suite
Pour contrôler les @imports dans le Roxygen Skeleton, on peut utiliser {autoimport}.
On compile la doc et met a jour les namespaces avec
devtools::document()Check
check()── R CMD check results ─────────────────── mypgk 0.0.0.9000 ────
Duration: 8.4s
0 errors ✔ | 0 warnings ✔ | 0 notes ✔Si le check est bon, on peut installer le package.
devtools::install()On peut maintenant charger son package.
library(mypkg)Tests
Les tests sont définis dans le dossier test/testthat. On y accède avec usethis.
usethis::use_testthat()
usethis::use_test()
devtools::test()Il faut tester (bonnes pratiques) :
- les arguments de la fonction (type)
- le résultat attendu
- les erreurs
- …
Important : définir un test pour chaque bug observé. Définir le test avant de corriger le bug. Ensuite on est content quand le test passe (et on est sur de détecter si ce bug est toujours présent).
Pour aller plus loin, on peut faire du test first. On défini le test avant d’écrire la fonction.
GitHub Actions
Pour optimiser les CI/CD on utilise les github actions (ou gitlab, mais c’est pas le même format).
usethis::use_github()
usethis::use_github_action()
usethis::use_pkgdown_github_pages()