<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://isig-wiki.ens-lyon.fr/index.php?action=history&amp;feed=atom&amp;title=Packages_R%3A_d%C3%A9velopper_un_package</id>
	<title>Packages R: développer un package - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://isig-wiki.ens-lyon.fr/index.php?action=history&amp;feed=atom&amp;title=Packages_R%3A_d%C3%A9velopper_un_package"/>
	<link rel="alternate" type="text/html" href="https://isig-wiki.ens-lyon.fr/index.php?title=Packages_R:_d%C3%A9velopper_un_package&amp;action=history"/>
	<updated>2026-07-25T21:23:55Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://isig-wiki.ens-lyon.fr/index.php?title=Packages_R:_d%C3%A9velopper_un_package&amp;diff=1259&amp;oldid=prev</id>
		<title>Lvaudor : Page créée avec « = Développer un package R avec RStudio = Ce tutoriel présente une démarche simple pour créer un package R moderne, documenté et testé. Il s&#039;appuie sur les packages &#039;&#039;&#039;devtools&#039;&#039;&#039;, &#039;&#039;&#039;usethis&#039;&#039;&#039;, &#039;&#039;&#039;roxygen2&#039;&#039;&#039; et &#039;&#039;&#039;testthat&#039;&#039;&#039;, qui constituent aujourd&#039;hui l&#039;écosystème de référence pour le développement de packages.  == Prérequis == Installer les principaux outils de développement :  &lt;code&gt;install.packages(c(    &quot;devtools&quot;,    &quot;usethis&quot;,    &quot;roxygen2... »</title>
		<link rel="alternate" type="text/html" href="https://isig-wiki.ens-lyon.fr/index.php?title=Packages_R:_d%C3%A9velopper_un_package&amp;diff=1259&amp;oldid=prev"/>
		<updated>2026-07-20T07:30:20Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « = Développer un package R avec RStudio = Ce tutoriel présente une démarche simple pour créer un package R moderne, documenté et testé. Il s&amp;#039;appuie sur les packages &amp;#039;&amp;#039;&amp;#039;devtools&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;usethis&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;roxygen2&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;testthat&amp;#039;&amp;#039;&amp;#039;, qui constituent aujourd&amp;#039;hui l&amp;#039;écosystème de référence pour le développement de packages.  == Prérequis == Installer les principaux outils de développement :  &amp;lt;code&amp;gt;install.packages(c(    &amp;quot;devtools&amp;quot;,    &amp;quot;usethis&amp;quot;,    &amp;quot;roxygen2... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Développer un package R avec RStudio =&lt;br /&gt;
Ce tutoriel présente une démarche simple pour créer un package R moderne, documenté et testé. Il s&amp;#039;appuie sur les packages &amp;#039;&amp;#039;&amp;#039;devtools&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;usethis&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;roxygen2&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;testthat&amp;#039;&amp;#039;&amp;#039;, qui constituent aujourd&amp;#039;hui l&amp;#039;écosystème de référence pour le développement de packages.&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
Installer les principaux outils de développement :&lt;br /&gt;
 &amp;lt;code&amp;gt;install.packages(c(&lt;br /&gt;
   &amp;quot;devtools&amp;quot;,&lt;br /&gt;
   &amp;quot;usethis&amp;quot;,&lt;br /&gt;
   &amp;quot;roxygen2&amp;quot;,&lt;br /&gt;
   &amp;quot;testthat&amp;quot;,&lt;br /&gt;
   &amp;quot;pkgdown&amp;quot;&lt;br /&gt;
 ))&amp;lt;/code&amp;gt;&lt;br /&gt;
Il est également recommandé d&amp;#039;utiliser une version récente de R et RStudio.&lt;br /&gt;
&lt;br /&gt;
= 1. Créer le package =&lt;br /&gt;
Dans RStudio :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;File &amp;gt; New Project &amp;gt; New Directory &amp;gt; R Package&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Choisir :&lt;br /&gt;
&lt;br /&gt;
* le nom du package (sans espaces ni caractères spéciaux)&lt;br /&gt;
* le dossier de création&lt;br /&gt;
&lt;br /&gt;
RStudio crée automatiquement toute l&amp;#039;architecture du package.&lt;br /&gt;
&lt;br /&gt;
On obtient notamment :&lt;br /&gt;
 &amp;lt;code&amp;gt;monpackage/&lt;br /&gt;
 &lt;br /&gt;
 ├── DESCRIPTION&lt;br /&gt;
 ├── NAMESPACE&lt;br /&gt;
 ├── R/&lt;br /&gt;
 ├── man/&lt;br /&gt;
 └── monpackage.Rproj&amp;lt;/code&amp;gt;&lt;br /&gt;
Les rôles des principaux dossiers sont :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Élément&lt;br /&gt;
!Rôle&lt;br /&gt;
|-&lt;br /&gt;
|R/&lt;br /&gt;
|Contient toutes les fonctions du package&lt;br /&gt;
|-&lt;br /&gt;
|man/&lt;br /&gt;
|Documentation générée automatiquement&lt;br /&gt;
|-&lt;br /&gt;
|DESCRIPTION&lt;br /&gt;
|Métadonnées et dépendances&lt;br /&gt;
|-&lt;br /&gt;
|NAMESPACE&lt;br /&gt;
|Fonctions exportées et imports (généré automatiquement)&lt;br /&gt;
|}&lt;br /&gt;
Les fichiers &amp;#039;&amp;#039;&amp;#039;NAMESPACE&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;man/&amp;#039;&amp;#039;&amp;#039; ne doivent généralement pas être modifiés à la main lorsqu&amp;#039;on utilise roxygen2.&lt;br /&gt;
&lt;br /&gt;
= 2. Initialiser le package =&lt;br /&gt;
Plusieurs outils peuvent être ajoutés immédiatement grâce à &amp;#039;&amp;#039;&amp;#039;usethis&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Initialiser Git ==&lt;br /&gt;
 &amp;lt;code&amp;gt;usethis::use_git()&amp;lt;/code&amp;gt;&lt;br /&gt;
Éventuellement :&lt;br /&gt;
 &amp;lt;code&amp;gt;usethis::use_github()&amp;lt;/code&amp;gt;&lt;br /&gt;
pour créer directement un dépôt GitHub.&lt;br /&gt;
&lt;br /&gt;
== Ajouter une licence ==&lt;br /&gt;
Par exemple :&lt;br /&gt;
 &amp;lt;code&amp;gt;usethis::use_mit_license()&amp;lt;/code&amp;gt;&lt;br /&gt;
ou&lt;br /&gt;
 &amp;lt;code&amp;gt;usethis::use_gpl3_license()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ajouter un README ==&lt;br /&gt;
 &amp;lt;code&amp;gt;usethis::use_readme_rmd()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= 3. Écrire des fonctions =&lt;br /&gt;
Toutes les fonctions doivent être placées dans le dossier&lt;br /&gt;
 &amp;lt;code&amp;gt;R/&amp;lt;/code&amp;gt;&lt;br /&gt;
Par exemple :&lt;br /&gt;
 &amp;lt;code&amp;gt;R/calcul.R&amp;lt;/code&amp;gt;&lt;br /&gt;
contenant&lt;br /&gt;
 &amp;lt;code&amp;gt;addition &amp;lt;- function(x, y) {&lt;br /&gt;
   x + y&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
Le nom du fichier est libre.&lt;br /&gt;
&lt;br /&gt;
En revanche, les fonctions doivent toujours être dans le dossier &amp;#039;&amp;#039;&amp;#039;R/&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
= 4. Documenter avec Roxygen =&lt;br /&gt;
Chaque fonction est précédée d&amp;#039;un bloc de commentaires.&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
 &amp;lt;code&amp;gt;#&amp;#039; Addition de deux nombres&lt;br /&gt;
 #&amp;#039;&lt;br /&gt;
 #&amp;#039; Additionne deux valeurs numériques.&lt;br /&gt;
 #&amp;#039;&lt;br /&gt;
 #&amp;#039; @param x premier nombre&lt;br /&gt;
 #&amp;#039; @param y second nombre&lt;br /&gt;
 #&amp;#039;&lt;br /&gt;
 #&amp;#039; @return Une valeur numérique.&lt;br /&gt;
 #&amp;#039;&lt;br /&gt;
 #&amp;#039; @export&lt;br /&gt;
 addition &amp;lt;- function(x, y) {&lt;br /&gt;
   x + y&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
La documentation est ensuite générée automatiquement.&lt;br /&gt;
&lt;br /&gt;
Dans RStudio :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Build &amp;gt; More &amp;gt; Document&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
ou&lt;br /&gt;
 &amp;lt;code&amp;gt;devtools::document()&amp;lt;/code&amp;gt;&lt;br /&gt;
Cette commande met à jour :&lt;br /&gt;
&lt;br /&gt;
* le dossier &amp;lt;code&amp;gt;man/&amp;lt;/code&amp;gt;&lt;br /&gt;
* le fichier &amp;lt;code&amp;gt;NAMESPACE&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ces fichiers ne doivent normalement jamais être édités manuellement.&lt;br /&gt;
&lt;br /&gt;
= 5. Gérer les dépendances =&lt;br /&gt;
Éviter de modifier directement le fichier DESCRIPTION.&lt;br /&gt;
&lt;br /&gt;
Préférer :&lt;br /&gt;
 &amp;lt;code&amp;gt;usethis::use_package(&amp;quot;sf&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
qui ajoute automatiquement&lt;br /&gt;
 &amp;lt;code&amp;gt;Imports:&lt;br /&gt;
     sf&amp;lt;/code&amp;gt;&lt;br /&gt;
Pour une dépendance utilisée uniquement pendant le développement :&lt;br /&gt;
 &amp;lt;code&amp;gt;usethis::use_package(&amp;quot;testthat&amp;quot;, type = &amp;quot;Suggests&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
Les types de dépendances les plus fréquents sont :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Type&lt;br /&gt;
!Utilisation&lt;br /&gt;
|-&lt;br /&gt;
|Imports&lt;br /&gt;
|Package nécessaire au fonctionnement&lt;br /&gt;
|-&lt;br /&gt;
|Suggests&lt;br /&gt;
|Package utilisé uniquement pour les tests ou des fonctionnalités optionnelles&lt;br /&gt;
|-&lt;br /&gt;
|Depends&lt;br /&gt;
|Rarement utilisé aujourd&amp;#039;hui&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= 6. Charger le package pendant le développement =&lt;br /&gt;
Pendant le développement, il n&amp;#039;est pas nécessaire de réinstaller le package après chaque modification.&lt;br /&gt;
&lt;br /&gt;
Utiliser :&lt;br /&gt;
 &amp;lt;code&amp;gt;devtools::load_all()&amp;lt;/code&amp;gt;&lt;br /&gt;
Cette commande :&lt;br /&gt;
&lt;br /&gt;
* charge toutes les fonctions ;&lt;br /&gt;
* recharge les données ;&lt;br /&gt;
* recharge les fichiers R modifiés ;&lt;br /&gt;
* permet de tester immédiatement les nouvelles fonctions.&lt;br /&gt;
&lt;br /&gt;
C&amp;#039;est la commande utilisée en permanence pendant le développement.&lt;br /&gt;
&lt;br /&gt;
= 7. Différence entre &amp;lt;code&amp;gt;load_all()&amp;lt;/code&amp;gt; et le bouton Build =&lt;br /&gt;
Ces deux actions ont des objectifs très différents.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;devtools::load_all()&amp;lt;/code&amp;gt; ==&lt;br /&gt;
À utiliser pendant le développement.&lt;br /&gt;
&lt;br /&gt;
Il simule un package installé mais sans construire réellement le package.&lt;br /&gt;
&lt;br /&gt;
C&amp;#039;est très rapide.&lt;br /&gt;
&lt;br /&gt;
Idéal pour :&lt;br /&gt;
&lt;br /&gt;
* tester une fonction ;&lt;br /&gt;
* lancer une application Shiny ;&lt;br /&gt;
* faire du débogage.&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
Le bouton &amp;#039;&amp;#039;&amp;#039;Build&amp;#039;&amp;#039;&amp;#039; réalise une véritable construction du package.&lt;br /&gt;
&lt;br /&gt;
Selon l&amp;#039;action choisie, RStudio peut :&lt;br /&gt;
&lt;br /&gt;
* documenter le package ;&lt;br /&gt;
* construire le fichier &amp;lt;code&amp;gt;.tar.gz&amp;lt;/code&amp;gt; ;&lt;br /&gt;
* installer le package ;&lt;br /&gt;
* vérifier (&amp;lt;code&amp;gt;R CMD check&amp;lt;/code&amp;gt;) qu&amp;#039;il respecte les standards CRAN.&lt;br /&gt;
&lt;br /&gt;
Cette étape est plus lente mais permet de détecter des erreurs qui ne sont pas visibles avec &amp;lt;code&amp;gt;load_all()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
En pratique :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;load_all()&amp;lt;/code&amp;gt; est utilisé des dizaines de fois par jour ;&lt;br /&gt;
* Build est utilisé avant un commit important ou avant une diffusion.&lt;br /&gt;
&lt;br /&gt;
= 8. Tester avec testthat =&lt;br /&gt;
Initialiser les tests :&lt;br /&gt;
 &amp;lt;code&amp;gt;usethis::use_testthat()&amp;lt;/code&amp;gt;&lt;br /&gt;
Créer un premier fichier de test :&lt;br /&gt;
 &amp;lt;code&amp;gt;usethis::use_test(&amp;quot;addition&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
On obtient :&lt;br /&gt;
 &amp;lt;code&amp;gt;tests/testthat/test-addition.R&amp;lt;/code&amp;gt;&lt;br /&gt;
Exemple :&lt;br /&gt;
 &amp;lt;code&amp;gt;test_that(&amp;quot;addition fonctionne&amp;quot;, {&lt;br /&gt;
 &lt;br /&gt;
   expect_equal(addition(2,3),5)&lt;br /&gt;
 &lt;br /&gt;
 })&amp;lt;/code&amp;gt;&lt;br /&gt;
Exécuter tous les tests :&lt;br /&gt;
 &amp;lt;code&amp;gt;devtools::test()&amp;lt;/code&amp;gt;&lt;br /&gt;
Les tests permettent de vérifier que les fonctions continuent à produire les résultats attendus après des modifications.&lt;br /&gt;
&lt;br /&gt;
= 9. Vérifier le package =&lt;br /&gt;
Avant toute diffusion :&lt;br /&gt;
 &amp;lt;code&amp;gt;devtools::check()&amp;lt;/code&amp;gt;&lt;br /&gt;
Cette commande lance l&amp;#039;équivalent de :&lt;br /&gt;
 &amp;lt;code&amp;gt;R CMD check&amp;lt;/code&amp;gt;&lt;br /&gt;
Elle détecte notamment :&lt;br /&gt;
&lt;br /&gt;
* erreurs ;&lt;br /&gt;
* avertissements ;&lt;br /&gt;
* notes ;&lt;br /&gt;
* documentation incomplète ;&lt;br /&gt;
* dépendances oubliées.&lt;br /&gt;
&lt;br /&gt;
Un package destiné au partage devrait idéalement être exempt d&amp;#039;erreurs et d&amp;#039;avertissements.&lt;br /&gt;
&lt;br /&gt;
= 10. Cas particulier : package contenant une application Shiny =&lt;br /&gt;
Un package peut également contenir une application Shiny.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;organisation est généralement la suivante :&lt;br /&gt;
 &amp;lt;code&amp;gt;R/&lt;br /&gt;
     app.R&lt;br /&gt;
     server.R&lt;br /&gt;
     ui.R&lt;br /&gt;
     modules/&lt;br /&gt;
     utils.R&amp;lt;/code&amp;gt;&lt;br /&gt;
La fonction principale est par exemple :&lt;br /&gt;
 &amp;lt;code&amp;gt;run_app &amp;lt;- function() {&lt;br /&gt;
 &lt;br /&gt;
   shiny::shinyApp(&lt;br /&gt;
     ui = app_ui(),&lt;br /&gt;
     server = app_server&lt;br /&gt;
   )&lt;br /&gt;
 &lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
Pendant le développement :&lt;br /&gt;
 &amp;lt;code&amp;gt;devtools::load_all()&lt;br /&gt;
 &lt;br /&gt;
 run_app()&amp;lt;/code&amp;gt;&lt;br /&gt;
L&amp;#039;application utilise alors directement les fonctions du package en cours de développement.&lt;br /&gt;
&lt;br /&gt;
Cette approche présente plusieurs avantages :&lt;br /&gt;
&lt;br /&gt;
* les fonctions sont réutilisables ;&lt;br /&gt;
* les tests peuvent porter sur la logique métier indépendamment de Shiny ;&lt;br /&gt;
* le code est mieux organisé ;&lt;br /&gt;
* il devient facile de documenter et partager les fonctions.&lt;br /&gt;
&lt;br /&gt;
Le package &amp;#039;&amp;#039;&amp;#039;golem&amp;#039;&amp;#039;&amp;#039; automatise une grande partie de cette architecture et constitue aujourd&amp;#039;hui une référence pour le développement d&amp;#039;applications Shiny complexes.&lt;br /&gt;
&lt;br /&gt;
= Bonnes pratiques =&lt;br /&gt;
&lt;br /&gt;
* Une fonction = une responsabilité.&lt;br /&gt;
* Documenter chaque fonction.&lt;br /&gt;
* Écrire des tests dès que possible.&lt;br /&gt;
* Utiliser &amp;lt;code&amp;gt;usethis&amp;lt;/code&amp;gt; plutôt que modifier les fichiers système à la main.&lt;br /&gt;
* Utiliser &amp;lt;code&amp;gt;load_all()&amp;lt;/code&amp;gt; pendant le développement.&lt;br /&gt;
* Lancer régulièrement &amp;lt;code&amp;gt;devtools::check()&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Versionner le projet avec Git.&lt;br /&gt;
&lt;br /&gt;
En suivant cette démarche, on obtient un package facile à maintenir, documenté, testable et partageable.&lt;/div&gt;</summary>
		<author><name>Lvaudor</name></author>
	</entry>
</feed>