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
::create_package("~/path/to/mypkg") usethis
.Rbuildignore
liste des fichiers ignorés pour le build.gitignore
DESCRIPTION
package metadataNAMESPACE
import et export des fonctionsR
main foldermypkg.Rproj
Versionning
::use_git() usethis
Écrire des fonctions
::use_r(name) usethis
Les fonctions sont définies dans des fichiers R/name.R
.
::load_all() devtools
Dépendances
On doit spécifier les packages qui sont utilisés.
::use_package('ggplot2') usethis
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 }
@export
permet l’export dans le NAMESPACE@inherisParams
permet 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
::document() devtools
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.
::install() devtools
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.
::use_testthat()
usethis
::use_test()
usethis
::test() devtools
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).
::use_github()
usethis::use_github_action()
usethis::use_pkgdown_github_pages() usethis