L’une des grandes forces du langage R est d’être facilement extensible à l’aide d’un système de packages faciles à gérer tant pour l’utilisateur que pour le développeur. Pour charger en mémoire un package, il est habituel d’utiliser la fonction library(). Par exemple pour pouvoir utiliser le package dfexplore il suffit de taper :

package(dfexplore)

Cependant, une autre fonction, require(), semble remplir la même mission.

require(dfexplore)

Objectif

Quelle est la différence entre les fonctions library() et require()?

Réponse courte

D’après abcdr.guyader.pro

il n’y en a pas… ou si peu […] require est a utiliser dans le corps d‘une fonction, qui affichera un message d’erreur si le package n’existe pas mais continuera son execution

Point de vue qui est partagé sur StackOverflow.

Documentation

Ces deux fonctions partagent la même page de documentation. En la lisant, on remarque que les deux fonctions ne partagent pas les mêmes arguments.

Argument library() require()
package X X
help X  
pos 2  
lib.loc NULL NULL
character.only FALSE FALSE
logical.return FALSE  
warn.conflicts TRUE TRUE
quietly FALSE FALSE
verbose getOption("verbose"))  

 4 arguments sont en plus dans library :

  • help : permets d’afficher l’aide d’un package (ou au moins sa description) sans le charger ;
  • pos : position dans la liste de recherche ;
  • logical.return : retourne TRUE ou FALSE selon que le package soit correctement chargé. Avec cette option activée, library() s’approche de require() mais le premier retourne toujours une erreur alors que le second ne retourne qu’un warning;
  • verbose : pour des informations supplémentaires.

require() présente un avantage lors de la création de package, est qu'il retourne un booléen indiquant si le package a été bien chargé ou non. Il peut être donc utilisé de la manière suivante :

# Si le package ne peut être chargé, l'installer
if (!require(dfexplore)) {

  #Installer le package
  install.packages("dfexplore")

  # Le charger. Arrête le script si chargement impossible.
  library(dfexplore)
}

Conclusion

La réponse courte est satisfaisante. Utiliser library() lors d’écriture de scripts simples et require() dans les fonctions, car ce dernier retourne un booléen permettant de vérifier si le package a bien été chargé.

Mise à jour

Yihui Xie vient d'écrire un billet à ce sujet.