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 commencer à confondre des objets
n
# ou voulais-je
N
Programmation R défensive

Forfaits et environnements

  • Les forfaits utilisent des espaces de noms comme espaces de noms
    • Pensez à un espace de noms comme à une boîte qui contient le forfait
  • Un espace de noms aide à garder de l'ordre
    • Un peu comme des dossiers
Programmation R défensive

Fonctions exportées

  • library() vous donne un accès direct à cette boîte de forfait
  • library("dplyr") donne un accès direct aux fonctions exportées de dplyr
## 238 fonctions exportées
getNamespaceExports("dplyr")
  • Sinon, utilisez :: pour accéder directement à une fonction
## La fonction filter de dplyr
dplyr::filter
Programmation R défensive

Les grands esprits se rencontrent

  • Parfois, des auteurs de forfaits proposent le même nom de fonction
## La fonction filter()
stats::filter()
dplyr::filter()
  • Si je tape filter(), quelle version j'obtiens ?
  • Ça dépend de l'ordre de chargement des forfaits !
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 sur vos gardes

Les conflits d'espaces de noms sont plus qu'ennuyants

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

Le forfait conflicted vise à 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...