Chapitre 12 Définir et organiser ses fonctions

Dans un projet R, les fonctions sont des blocs de code réutilisables qui permettent de structurer, automatiser et clarifier les opérations. Définir ses propres fonctions est une bonne pratique dès que l’on répète un traitement ou que l’on veut isoler une logique métier spécifique. Cela permet :

  • d’éviter la redondance de code ;
  • de mieux documenter son raisonnement ;
  • de tester plus facilement chaque partie du projet ;
  • de réutiliser les mêmes opérations dans plusieurs contextes (scripts, Shiny, RMarkdown, etc.).

12.1 Bonnes pratiques

Voici quelques principes généraux pour la création de fonctions :

  • Donner un nom explicite, en anglais ou en français, qui décrit l’action ou le résultat attendu (calcul_biomasse(), prepare_data()).
  • Documenter la fonction avec des commentaires roxygen2 (#'), surtout si elle est appelée dans plusieurs scripts ou exportée dans un package.
  • Isoler chaque fonction dans un fichier logique (ex: utils.R, statistiques.R), ou mieux, un fichier par fonction dans un projet structuré comme un package.

12.2 Typologie des fonctions dans un projet

Table 12.1: Typologie des fonctions dans un projet R
Terme Définition Portée / Usage Exemple typique
Fonction Bloc de code nommé qui effectue une tâche et peut être réutilisé. Interne ou externe ; réutilisable. mean(), filter(), wri()
Fonction métier Fonction centrale au domaine d’application (ex. analyse écologique, économique). Exportée dans le package / projet. taille_masse_age(), psd_indice()
Fonction utilitaire Fonction d’aide qui supporte les fonctions métier (calculs, formats, validations…). Interne au package ou non exportée. format_pval(), extract_param()
Fonction interne Fonction définie à l’intérieur d’une autre fonction, pour usage strictement local. Non accessible en dehors de la fonction principale. resumer_wr_par_groupe() dans wri()
Fonction module UI/Server Fonction définissant une portion réutilisable d’interface dans Shiny (souvent avec golem). Nommée mod_nom_ui() ou mod_nom_server() ; placée dans R/modules/ mod_cpue_ui(), mod_cpue_server()
Fonction d’affichage (render) Fonction utilitaire encapsulant le rendu d’un tableau ou graphique dans Shiny. Utilisée dans server ou modules Shiny, pour automatiser les render*. render_table_flextable()
Fonction exportée Fonction accessible depuis l’extérieur du package (via @export). Accessible à l’utilisateur ; visible via la documentation du package. wri(), structure_taille()
Fonction non exportée Fonction interne au package, non visible à l’utilisateur final (pas @export). Utilisée seulement dans d’autres fonctions du package ou projet. fitfun(), simulateur_captures()

12.3 Conseils d’organisation

Pour garder une structure claire :

  • Créez un sous-dossier R/ avec des fichiers nommés logiquement (utils_data.R, mod_viz.R, etc.).
  • Placez les fonctions internes (utilisées uniquement à l’intérieur d’une autre fonction) soit à la fin du fichier principal, soit dans un sous-dossier dédié comme R/internals/, pour clarifier la structure du projet.
  • Si vous structurez votre projet comme un package, n’oubliez pas d’exporter les fonctions pertinentes avec @export et d’utiliser devtools::document() pour régénérer la documentation.