Packages et espaces de noms

Programmation R défensive

Dr. Colin Gillespie

Jumping Rivers

Votre environnement global

  • L'environnement par défaut est .GlobalEnv
  • Les objets sont stockés dans des environnements
  • Pour voir le contenu, utilisez ls()
  • Cet environnement se remplit vite
  • On peut finir par confondre des objets
n
# ou voulais-je
N
Programmation R défensive

Packages et environnements

  • Les packages utilisent des espaces de noms comme espaces pour les noms
    • Pensez à un espace de noms comme à une boîte qui contient le package
  • Un espace de noms aide à garder les choses en ordre
    • Un peu comme des dossiers
Programmation R défensive

Fonctions exportées

  • library() vous donne un accès direct à cette boîte du package
  • library("dplyr") donne un accès direct aux fonctions exportées de dplyr
## 238 exported functions
getNamespaceExports("dplyr")
  • Sinon, on peut utiliser :: pour appeler une fonction directement
## La fonction filter de dplyr
dplyr::filter
Programmation R défensive

Les grands esprits se rencontrent

  • Parfois, des auteurs de packages utilisent le même nom de fonction
## La fonction filter()
stats::filter()
dplyr::filter()
  • Si je tape filter(), quelle version obtiens-je ?
  • Cela dépend de l'ordre de chargement des packages !
Programmation R défensive

Les grands esprits se rencontrent

  • search() à la rescousse
search()
# [1] ".GlobalEnv"         "package:dplyr"      "package:stats"  
# <Other packages>
Programmation R défensive

Soyez défensif

Les conflits d'espaces de noms ne sont pas qu'agaçants

  • Ils peuvent causer des bogues difficiles à diagnostiquer
Programmation R défensive

Le package conflicted vous oblige à rendre votre choix de fonction explicite

library("conflicted")
library("dplyr")
filter
#Error: [conflicted] `filter` found in 2 packages.
#Either pick the one you want with `::` 
# * dplyr::filter
# * stats::filter
#Or declare a preference with `conflict_prefer()`
# * conflict_prefer("filter", "dplyr")
# * conflict_prefer("filter", "stats")
Programmation R défensive

Réveil en douceur

Programmation R défensive

Preparing Video For Download...