Utilisez toujours library. Jamais 1 utilisation require.
( 1 Presque jamais. Peut-être .)
En résumé, cela est dû au fait que, lors de l'utilisation require, votre code peut produire des résultats différents et erronés, sans signaler d'erreur . C'est rare mais pas hypothétique! Considérez ce code, qui donne des résultats différents selon que {dplyr} peut être chargé:
require(dplyr)
x = data.frame(y = seq(100))
y = 1
filter(x, y == 1)
Cela peut conduire à des résultats subtilement faux. Utiliser libraryau lieu de requirerenvoie une erreur ici, signalant clairement que quelque chose ne va pas. C'est bien .
Cela rend également le débogage de tous les autres échecs plus difficile: si vous requireun package au début de votre script et utilisez ses exportations à la ligne 500, vous obtiendrez un message d'erreur «objet« foo »introuvable» à la ligne 500, plutôt qu'un erreur "il n'y a pas de package appelé 'bla'".
Le seul cas d'utilisation acceptable requireest lorsque sa valeur de retour est immédiatement vérifiée, comme le montrent certaines des autres réponses. Il s'agit d'un modèle assez courant, mais même dans ces cas, il est préférable (et recommandé, voir ci-dessous) de séparer le contrôle d'existence et le chargement du package.
Plus techniquement, requireappelle en fait en libraryinterne (si le package n'était pas déjà attaché - requireeffectue donc une vérification redondante, car vérifie library également si le package a déjà été chargé). Voici une implémentation simplifiée de requirepour illustrer ce qu'il fait:
require = function (package) {
already_attached = paste('package:', package) %in% search()
if (already_attached) return(TRUE)
maybe_error = try(library(package, character.only = TRUE))
success = ! inherits(maybe_error, 'try-error')
if (! success) cat("Failed")
success
}
Les développeurs R expérimentés conviennent:
Yihui Xie , auteur de {knitr}, {bookdown} et de nombreux autres packages dit :
Mesdames et messieurs, je l'ai déjà dit: require () est la mauvaise façon de charger un package R; utilisez plutôt library ()
Hadley Wickham , auteur de packages R plus populaires que quiconque, dit
Utilisation library(x)dans les scripts d'analyse de données. […] Vous n'avez jamais besoin d'utiliser require()( requireNamespace()c'est presque toujours mieux)