web-dev-qa-db-fra.com

Comment décharger un paquet sans redémarrer R

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): invalid name

detach("vegan")

Erreur dans l'argument detach("vegan"): invalid name

Alors, comment puis-je décharger un paquet?

476
Ari B. Friedman

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)
589
kohske

Vous pouvez également utiliser la commande unloadNamespace, comme dans:

unloadNamespace("sqldf")

La fonction détache l'espace de nom avant de le décharger.

74
rstober

Vous pouvez décocher le bouton de la case à cocher dans RStudio (packages).

RStudio packages pane

24
Ajay Ohri

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)
9
Mehrad Mahmoudian

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!

8
dca

detach(package:PackageName) fonctionne et il n'est pas nécessaire d'utiliser des guillemets.

7
Alper Gur

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

Solution

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 .

Exemple

_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.

0
Konrad

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)
0
EsKe