J'aimerais décharger un paquet sans avoir à redémarrer R (principalement parce que le redémarrer lorsque j'essaie différents paquetages en conflit devient frustrant, mais il est concevable que cela puisse être utilisé dans un programme pour utiliser une fonction puis une autre, bien que l'espace de noms le référencement est probablement une meilleure idée pour cet usage).
?library
ne montre aucune option qui déchargerait un paquet.
Il y a une suggestion que detach
puisse décharger le paquet, mais les deux suivants échouent:
detach(vegan)
Erreur dans l'argument
detach(vegan)
: invalidname
detach("vegan")
Erreur dans l'argument
detach("vegan")
: invalidname
Alors, comment puis-je décharger un paquet?
Essayez ceci (voir ?detach
pour plus de détails):
detach("package:vegan", unload=TRUE)
Il est possible de charger plusieurs versions d’un paquet à la fois (par exemple, si vous avez une version de développement et une version stable dans différentes bibliothèques). Pour vous assurer que toutes les copies sont détachées, utilisez cette fonction.
detach_package <- function(pkg, character.only = FALSE)
{
if(!character.only)
{
pkg <- deparse(substitute(pkg))
}
search_item <- paste("package", pkg, sep = ":")
while(search_item %in% search())
{
detach(search_item, unload = TRUE, character.only = TRUE)
}
}
L'utilisation est, par exemple
detach_package(vegan)
ou
detach_package("vegan", TRUE)
Vous pouvez également utiliser la commande unloadNamespace, comme dans:
unloadNamespace("sqldf")
La fonction détache l'espace de nom avant de le décharger.
J'ai essayé ce que kohske avait écrit comme réponse et j'ai encore une erreur, alors j'ai fait une recherche et trouvé ceci qui a fonctionné pour moi (R 3.0.2):
require(splines) # package
detach(package:splines)
ou aussi
library(splines)
pkg <- "package:splines"
detach(pkg, character.only = TRUE)
Lorsque vous effectuez des va-et-vient entre les scripts, il peut suffire de parfois être nécessaire pour décharger un paquet. Voici une instruction IF simple qui empêchera les avertissements de s'afficher si vous tentiez de décharger un package qui n'était pas chargé.
if("package:vegan" %in% search()) detach("package:vegan", unload=TRUE)
Inclure ceci au début d'un script peut être utile.
J'espère que ça fait votre journée!
detach(package:PackageName)
fonctionne et il n'est pas nécessaire d'utiliser des guillemets.
Je voudrais ajouter une solution alternative. Cette solution ne répond pas directement à votre question sur le déchargement d'un paquet, mais, à mon humble avis, vous offre une solution de rechange plus propre pour atteindre votre objectif souhaité, ce qui, je le comprends bien, concerne essentiellement la prévention des conflits de noms et essayer différentes fonctions, comme indiqué:
principalement parce que redémarrer R alors que j'essaie différents packages conflictuels devient frustrant, mais cela pourrait être utilisé dans un programme pour utiliser une fonction puis une autre - bien que le référencement d'espace de noms soit probablement une meilleure idée pour cette utilisation
La fonction with_package
proposée via le package withr
offre la possibilité de:
attachez un package au chemin de recherche, exécute le code, puis supprime le package du chemin de recherche. L'espace de noms du paquet est cependant et non .
_library(withr)
with_package("ggplot2", {
ggplot(mtcars) + geom_point(aes(wt, hp))
})
# Calling geom_point outside withr context
exists("geom_point")
# [1] FALSE
_
_geom_point
_ utilisé dans l'exemple n'est pas accessible à partir de l'espace de noms global. Je pense que cela pourrait être une façon plus simple de gérer les conflits que de charger et décharger des paquets.
Il suffit d’aller dans la fenêtre OUTPUT, puis de cliquer sur l’icône Packages (située entre les icônes Plot and Help). Supprimez "cochez/cocher" du paquet que vous voulez décharger.
Pour utiliser à nouveau le paquet, placez un "coche ou coche" devant le paquet ou utilisez:
library (lme4)