120 votes

détacher tous les paquets pendant le travail en R

En travaillant à la résolution d'un autre problème, j'ai rencontré ce problème :

Je peux supprimer tous les objets R en :

rm(list = ls(all = TRUE))

Existe-t-il une commande équivalente permettant de détacher les paquets 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 

require(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, bien que même il a travaillé dans pas 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 cherche, c'est quelque chose de global comme.. :

  rm(list = ls(all = TRUE))

pour les objets, s'attendre à ce qu'il ne supprime pas les paquets de base attachés

Merci ;

3 votes

Non pas que votre question ne soit pas valable, mais pourquoi ne pas simplement redémarrer R ?

5 votes

@Aaron parce que vous ne devriez pas avoir à le faire ;-) Pour passer R CMD check un paquet est censé se décharger proprement, donc R Core s'attend à ce que cela soit possible et que l'on puisse souhaiter le faire.

0 votes

@Aaron, je pense que parfois il pourrait être utile de laisser partir la session lorsque certains paquets causent ou pourraient causer des interférences, mais ont été utilisés dans les étapes précédentes ...

3voto

Ajay Ohri Points 59

Ou si vous avez RStudio, il suffit de décocher toutes les cases cochées dans l'onglet Packages pour détacher

1 votes

Si vous avez beaucoup de paquets chargés, il est fastidieux de les décocher tous manuellement.

3voto

jazzie Points 31
#Detach all  packages
detachAllPackages <- function() {

  basic.packages <- c("package:stats","package:graphics","package:grDevices","package:utils","package:datasets","package:methods","package:base")

  package.list <- search()[ifelse(unlist(gregexpr("package:",search()))==1,TRUE,FALSE)]

  package.list <- setdiff(package.list,basic.packages)

  if (length(package.list)>0)  for (package in package.list) detach(package, character.only=TRUE)

}

detachAllPackages()

Cela permet de s'assurer que tous les paquets sont détachés, à l'exception des paquets de base.

0 votes

Quelle est la différence avec la réponse de @mjaniec ?

1voto

Prashant Points 19

La plupart du temps, c'est le plyr vs dplyr problème. Utilisez ceci au début du code :

detach("package:plyr", unload=TRUE)

Ainsi, à chaque fois que le script s'exécute, il efface le fichier plyr paquet

0voto

Charlie Points 127

En combinant des morceaux de diverses réponses, j'ai trouvé la solution la plus robuste...

packs <- c(names(sessionInfo()$otherPkgs), names(sessionInfo()$loadedOnly))
if(length(packs) > 0){ 
  message('Unloading packages -- if any problems occur, please try this from a fresh R session')
  while(length(packs) > 0){
    newpacks <- c()
    for(packi in 1:length(packs)){
      u=try(unloadNamespace(packs[packi]))
      if(class(u) %in% 'try-error') newpacks <- c(newpacks,packs[packi])
    }
    packs <- newpacks
    Sys.sleep(.1)
  }
}

0voto

Ajay Points 45

Pourquoi ne pas utiliser l'option ci-dessous pour supprimer tous les paquets attachés ?

intialPackages = search() # added as 1st line of R script to get list of default packages
# below lines are added when newly attached packages needs to be removed
newPackages = search()[!(search() %in% intialPackages)]
try(sapply(newPackages, detach, character.only=TRUE, unload=TRUE, force=TRUE), silent=TRUE)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X