Tout en travaillant pour résoudre un autre problème, j'ai eu ce problème:
Je peux supprimer tous les objets R en:
rm(list = ls(all = TRUE))
Existe-t-il une commande équivalente qui peut détacher les packages installés pendant la session de travail?
> sessionInfo()
R version 2.12.2 (2011-02-25)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
exiger (ggplot2)
Loading required package: ggplot2
Loading required package: reshape
Loading required package: plyr
Attaching package: 'reshape'
The following object(s) are masked from 'package:plyr':
round_any
Loading required package: grid
Loading required package: proto
sessionInfo ()
R version 2.12.2 (2011-02-25)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] grid stats graphics grDevices utils datasets methods
[8] base
other attached packages:
[1] ggplot2_0.8.9 proto_0.3-9.1 reshape_0.8.4 plyr_1.4
J'ai essayé de cette façon, même si cela ne fonctionnait pas dans une solution globale:
pkg <- c("package:ggplot2_0.8.9", "package:proto_0.3-9.1", "package:reshape_0.8.4", "package:plyr_1.4")
detach(pkg, character.only = TRUE)
Error in detach(pkg, character.only = TRUE) : invalid 'name' argument
In addition: Warning message:
In if (is.na(pos)) stop("invalid 'name' argument") :
the condition has length > 1 and only the first element will be used
Ce que je recherche, c'est quelque chose de global comme:
rm(list = ls(all = TRUE))
pour les objets, attendez-vous à ce qu'il ne supprime pas les packages de base attachés
Merci;
R CMD check
un paquet est censé se décharger proprement, donc R Core s'attend à ce que ce soit possible et quelque chose que l'on pourrait souhaiter faire.Réponses:
Donc, quelqu'un aurait dû simplement répondre à ce qui suit.
(edit: 6-28-19) Dans la dernière version de R 3.6.0 veuillez utiliser à la place.
Notez que l'utilisation de invisible (*) n'est pas nécessaire mais peut être utile pour empêcher la réponse NULL de spammer verticalement la fenêtre R.
(edit: 20/09/2019) Dans la version 3.6.1
Il peut être utile de convertir d'
names(sessionInfo()$loadedOnly)
abord les packages chargés uniquement en packages explicitement attachés, puis de détacher les packages, comme tel.On peut tenter de décharger les packages de base via $ basePkgs et également essayer d'utiliser
unloadNamespace(loadedNamespaces())
. Cependant, ceux-ci sont généralement remplis d'erreurs et pourraient interrompre les fonctionnalités de base telles que lesessionInfo()
renvoi d'erreurs. Cela se produit généralement en raison d'un manque de réversibilité dans la conception de l'emballage d'origine. ActuellementtimeDate
peut se briser de manière irréversible, par exemple.la source
invisible(lapply(paste0('package:', names(sessionInfo()$otherPkgs)), detach, character.only=TRUE, unload=TRUE))
résultats dans uneError in FUN(X[[i]], ...) : invalid 'name' argument
erreurError in FUN(X[[i]], ...)...
se produit fréquemment lorsqu'il n'y a qu'une valeur NULL présente. On peut tester cela avecnames(sessionInfo()$otherPkgs)
. S'il revientNULL
, c'est la cause.Veuillez essayer ceci:
la source
plyr
et quedplyr
cela semble la seule voie à suivre. Merci!Vous étiez proche. Notez ce qui
?detach
a à dire sur le premier argumentname
dedetach()
:Nous devons donc appeler à plusieurs reprises
detach()
une fois par élément depkg
. Il y a quelques autres arguments que nous devons spécifier pour que cela fonctionne. Le premier estcharacter.only = TRUE
, qui permet à la fonction de supposer qu'ilname
s'agit d'une chaîne de caractères - cela ne fonctionnera pas sans elle. Deuxièmement, nous souhaitons probablement également décharger tout espace de noms associé. Ceci peut être réalisé en définissantunload = TRUE
. La solution est donc, par exemple:Voici un exemple complet:
Si vous souhaitez en faire une fonction, étudiez le code
sessionInfo()
pour voir comment il identifie ce qu'il appelle «autres packages attachés:». Combinez ce morceau de code avec l'idée ci-dessus dans une seule fonction et vous êtes à la maison et au sec. Je vous laisse cependant le soin.la source
pkgs = names(sessionInfo()$otherPkgs)
etpkgs = paste('package:', pkgs, sep = "")
force=TRUE
au cas où les packages auraient des dépendances.nothing
Il peut être intéressant d'ajouter une solution mise à disposition par Romain François . Une fois chargé, le package
nothing
, qui est actuellement disponible sur GitHub , déchargera tous les packages chargés; comme dans l'exemple que Romain fournit:Installation
Avec l'utilisation du
devtools
package:pacman
Une approche alternative utilise le
pacman
package disponible via CRAN:la source
pacman::p_unload("all")
- être aussi?S'appuyant sur la réponse de Gavin mais pas tout à fait pour une fonction complète serait cette séquence:
la source
lapply(paste("package:", names(sessionInfo()$otherPkgs), sep=""), detach, character.only = TRUE, unload = TRUE)
. Je n'y arriverai jamais sans votre réponse!ou si vous avez RStudio, décochez simplement toutes les cases cochées dans l'onglet Packages pour détacher
la source
cela garantira que tous les packages sont détachés de vos packages de base
la source
La plupart du temps, c'est le problème du
plyr
vs.dplyr
Utilisez ceci au début du code:Ainsi, chaque fois que le script s'exécute, il efface le
plyr
packagela source
si vous rencontrez des problèmes avec des packages qui ont des fonctions nommées de manière similaire en conflit les unes avec les autres, vous pouvez toujours référencer l'espace de noms du package dont vous voulez la fonction.
la source
La combinaison de bits de diverses réponses a donné la solution la plus robuste que j'ai pu trouver ...
la source