Come scaricare un pacchetto senza riavviare R


541

Vorrei scaricare un pacchetto senza dover riavviare R (principalmente perché riavviare R mentre provo pacchetti diversi e in conflitto sta diventando frustrante, ma è possibile che questo possa essere usato in un programma per usare una funzione e poi un'altra - sebbene lo spazio dei nomi fare riferimento è probabilmente un'idea migliore per quell'uso).

?library non mostra alcuna opzione che scarichi un pacchetto.

C'è un suggerimento che detachpuò scaricare il pacchetto, ma entrambi i seguenti falliscono:

detach(vegan)

Errore in detach(vegan): nameargomento non valido

detach("vegan")

Errore in detach("vegan"): nameargomento non valido

Quindi come scarico un pacchetto?


5
@Iteratore: una libreria è una posizione in cui trovi i pacchetti. (Non sono sinonimi.) .libPaths()Ti fornisce i percorsi di tutte le librerie sul tuo sistema.
Richie Cotton,

17
@Richie: grazie. Lo capisco nel contesto R, ma sento che l'utilizzo di R sovraccarica o rende ambiguo il termine libraryin due modi: 1 - non è lo stesso uso di libraryaltrove, e 2 - il termine è usato library()per caricare ... non un libreria, ma un pacchetto.
Iteratore

2
@Iteratore Hai ragione. Questa era la risposta di cui avevo bisogno, e quando cercavo su google ho usato "opposto di require" o "annulla library" perché in questo modo di solito carica, erm, "pacchetti". Quindi intitolarlo correttamente rende la domanda più corretta ma anche più difficile da trovare.
isomorfismi

Risposte:


657

Prova questo (vedi ?detachper maggiori dettagli):

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

È possibile avere più versioni di un pacchetto caricate contemporaneamente (ad esempio, se si dispone di una versione di sviluppo e una versione stabile in librerie diverse). Per garantire la disconnessione di tutte le copie, utilizzare questa funzione.

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'uso è, per esempio

detach_package(vegan)

o

detach_package("vegan", TRUE)

3
@hadley In effetti. La versione non quotata non sembra funzionare nell'ultima versione di R. Ho aggiornato la risposta di kohske per riflettere la tua soluzione.
Ari B. Friedman,

1
@ AriB.Friedman, ora come una domanda .
Eric Fail

1
> detach("package:MASS", unload=TRUE) Error in detach("package:MASS", unload = TRUE) : invalid 'name' argument
Mona Jalal,

5
Se viene visualizzato un errore dell'argomento "name" non valido, aggiungere character.only = TRUE.
Dan Tenenbaum,

2
> detach ("pacchetto: kriging", scarica = TRUE, character.only = T) Errore nello scollegamento ("pacchetto: kriging", scarica = TRUE, character.only = T): argomento 'nome' non valido. Tuttavia la soluzione @rstober funziona!
Andrew,

86

Puoi anche usare il unloadNamespacecomando, come in:

unloadNamespace("sqldf")

La funzione scollega lo spazio dei nomi prima di scaricarlo.


1
Nel caso in cui la soluzione di @ kohske non funzionasse anche per te, questo ha funzionato per me
Wassadamo

29

È possibile deselezionare il pulsante della casella di controllo in RStudio (pacchetti).

Riquadro dei pacchetti di RStudio


16
Vale la pena aggiungere che ciò comporta detach("package:packageToUnload", unload=TRUE)l'esecuzione di un comando e non è diverso dalla soluzione già proposta.
Konrad,

2
Inoltre, la casella non è selezionata se il pacchetto è stato caricato utilizzando rstudio install & restart (bug?). Ma puoi semplicemente selezionarlo e deselezionarlo.
jiggunjer,

9

Ho provato quello che kohske ha scritto come risposta e ho avuto di nuovo un errore, quindi ho fatto qualche ricerca e ho trovato questo che ha funzionato per me (R 3.0.2):

require(splines) # package
detach(package:splines)

o anche

library(splines)
pkg <- "package:splines"
detach(pkg, character.only = TRUE)

3
Che errore ricevi? Perché funziona per me (R 3.1). E la seconda soluzione è la stessa risposta di @ koshke, solo senza scarico (quindi lo spazio dei nomi del pacchetto non viene scaricato).
alko989,

Ho avuto lo stesso errore. il punto è che ho dato la stessa soluzione di @Kohske ma con un nome di pacchetto diverso. significa semplicemente che se usi il pacchetto: allora dovrebbe funzionare bene, ma se non lo usi, otterrai lo stesso errore della domanda. ;)
Mehrad Mahmoudian,

Aspetta ... quindi hai provato a scaricare un pacchetto che non è stato nemmeno caricato? E sei sorpreso di avere un errore?
Gregor Thomas,

@Gregor Per favore, rileggi di nuovo tutto prima di premere il pulsante downvote? !!! la funzione request () e library () fa quasi lo stesso (almeno in questo caso), quindi il pacchetto è già caricato !! Non sono responsabile per la mancanza di informazioni !!
Mehrad Mahmoudian,

8

Quando si procede avanti e indietro tra gli script, a volte può essere necessario scaricare un pacchetto. Ecco una semplice dichiarazione IF che impedisce gli avvisi che apparirebbero se si provasse a scaricare un pacchetto che non era attualmente caricato.

if("package:vegan" %in% search()) detach("package:vegan", unload=TRUE) 

Includere questo nella parte superiore di uno script potrebbe essere utile.

Spero che questo renda la tua giornata!


8

detach(package:PackageName) funziona e non è necessario utilizzare le virgolette.


3

Puoi provare tutto quello che vuoi rimuovere un pacchetto (e tutte le dipendenze che ha portato a fianco) usando unloadNamespace()ma il footprint di memoria continuerà comunque. E no, detach("package:,packageName", unload=TRUE, force = TRUE)non funzionerà neanche.

Da una nuova console nuova o Session > Restart Rcontrolla la memoria con il pryrpacchetto:

pryr::mem_used()

# 40.6 MB   ## This will depend on which packages are loaded obviously (can also fluctuate a bit after the decimal)

Controlla il mio sessionInfo()

R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 17763)

Matrix products: default

locale:
[1] LC_COLLATE=English_Canada.1252  LC_CTYPE=English_Canada.1252    LC_MONETARY=English_Canada.1252 LC_NUMERIC=C                   
[5] LC_TIME=English_Canada.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_3.6.1   pryr_0.1.4       magrittr_1.5     tools_3.6.1      Rcpp_1.0.3       stringi_1.4.3    codetools_0.2-16 stringr_1.4.0   
[9] packrat_0.5.0   

Carichiamo il Seuratpacchetto e controlliamo il nuovo footprint di memoria :

library(Seurat)
pryr::mem_used()

# 172 MB    ## Likely to change in the future but just to give you an idea

Usiamo unloadNamespace()per rimuovere tutto:

unloadNamespace("Seurat")
unloadNamespace("ape")
unloadNamespace("cluster")
unloadNamespace("cowplot")
unloadNamespace("ROCR")
unloadNamespace("gplots")
unloadNamespace("caTools")
unloadNamespace("bitops")
unloadNamespace("fitdistrplus")
unloadNamespace("RColorBrewer")
unloadNamespace("sctransform")
unloadNamespace("future.apply")
unloadNamespace("future")
unloadNamespace("plotly")
unloadNamespace("ggrepel")
unloadNamespace("ggridges")
unloadNamespace("ggplot2")
unloadNamespace("gridExtra")
unloadNamespace("gtable")
unloadNamespace("uwot")
unloadNamespace("irlba")
unloadNamespace("leiden")
unloadNamespace("reticulate")
unloadNamespace("rsvd")
unloadNamespace("survival")
unloadNamespace("Matrix")
unloadNamespace("nlme")
unloadNamespace("lmtest")
unloadNamespace("zoo")
unloadNamespace("metap")
unloadNamespace("lattice")
unloadNamespace("grid")
unloadNamespace("httr")
unloadNamespace("ica")
unloadNamespace("igraph")
unloadNamespace("irlba")
unloadNamespace("KernSmooth")
unloadNamespace("leiden")
unloadNamespace("MASS")
unloadNamespace("pbapply")
unloadNamespace("plotly")
unloadNamespace("png")
unloadNamespace("RANN")
unloadNamespace("RcppAnnoy")
unloadNamespace("tidyr")
unloadNamespace("dplyr")
unloadNamespace("tibble")
unloadNamespace("RANN")
unloadNamespace("tidyselect")
unloadNamespace("purrr")
unloadNamespace("htmlwidgets")
unloadNamespace("htmltools")
unloadNamespace("lifecycle")
unloadNamespace("pillar")
unloadNamespace("vctrs")
unloadNamespace("rlang")
unloadNamespace("Rtsne")
unloadNamespace("SDMTools")
unloadNamespace("Rdpack")
unloadNamespace("bibtex")
unloadNamespace("tsne")
unloadNamespace("backports")
unloadNamespace("R6")
unloadNamespace("lazyeval")
unloadNamespace("scales")
unloadNamespace("munsell")
unloadNamespace("colorspace")
unloadNamespace("npsurv")
unloadNamespace("compiler")
unloadNamespace("digest")
unloadNamespace("R.utils")
unloadNamespace("pkgconfig")
unloadNamespace("gbRd")
unloadNamespace("parallel")
unloadNamespace("gdata")
unloadNamespace("listenv")
unloadNamespace("crayon")
unloadNamespace("splines")
unloadNamespace("zeallot")
unloadNamespace("reshape")
unloadNamespace("glue")
unloadNamespace("lsei")
unloadNamespace("RcppParallel")
unloadNamespace("data.table")
unloadNamespace("viridisLite")
unloadNamespace("globals")

Ora controlla sessionInfo():

R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 17763)

Matrix products: default

locale:
[1] LC_COLLATE=English_Canada.1252  LC_CTYPE=English_Canada.1252    LC_MONETARY=English_Canada.1252 LC_NUMERIC=C                   
[5] LC_TIME=English_Canada.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
 [1] tools_3.6.1       stringr_1.4.0     rstudioapi_0.10   pryr_0.1.4        jsonlite_1.6      gtools_3.8.1      R.oo_1.22.0      
 [8] magrittr_1.5      Rcpp_1.0.3        R.methodsS3_1.7.1 stringi_1.4.3     plyr_1.8.4        reshape2_1.4.3    codetools_0.2-16 
[15] packrat_0.5.0     assertthat_0.2.1 

Controlla il footprint di memoria :

pryr::mem_used()

# 173 MB

Link alla dimostrazione per il cast dello schermo


2

Vorrei aggiungere una soluzione alternativa. Questa soluzione non risponde direttamente alla tua domanda sullo scarico di un pacchetto ma, IMHO, fornisce un'alternativa più pulita per raggiungere il tuo obiettivo desiderato, che comprendo, si occupa in generale di evitare conflitti di nomi e provare diverse funzioni, come affermato:

principalmente perché riavviare R mentre provo pacchetti diversi e in conflitto sta diventando frustrante, ma presumibilmente questo potrebbe essere usato in un programma per usare una funzione e poi un'altra - sebbene il riferimento allo spazio dei nomi sia probabilmente un'idea migliore per quell'uso

Soluzione

La funzione with_packageofferta tramite il withrpacchetto offre la possibilità di:

collega un pacchetto al percorso di ricerca, esegue il codice, quindi rimuove il pacchetto dal percorso di ricerca. Lo spazio dei nomi del pacchetto non viene scaricato, tuttavia.

Esempio

library(withr)
with_package("ggplot2", {
  ggplot(mtcars) + geom_point(aes(wt, hp))
})
# Calling geom_point outside withr context 
exists("geom_point")
# [1] FALSE

geom_pointusato nell'esempio non è accessibile dallo spazio dei nomi globale. Ritengo che potrebbe essere un modo più pulito di gestire i conflitti rispetto al caricamento e allo scaricamento dei pacchetti.


1

Si noti inoltre che è possibile utilizzare solo unload()una volta. Se lo usi una seconda volta senza rieseguire library(), visualizzerai l' argomento "nome" non valido del messaggio di errore non informativo :

library(vegan)
#> Loading required package: permute
#> Loading required package: lattice
#> This is vegan 2.5-6
detach("package:vegan",  unload=TRUE)
detach("package:vegan",  unload=TRUE)
#> Error in detach("package:vegan", unload = TRUE): invalid 'name' argument

Creato il 2020-05-09 dal pacchetto reprex (v0.3.0)


0

Basta andare alla finestra OUTPUT, quindi fare clic sull'icona Pacchetti (si trova tra le icone Grafico e Guida ). Rimuovere " segno di spunta / segno di spunta " dal pacchetto che si desidera scaricare.

Per utilizzare nuovamente il pacchetto basta mettere un " segno di spunta o un segno di spunta " davanti al pacchetto o usare:

library (lme4)

1
A meno che tu non abbia il tuo percorso di libreria personalizzato. Non viene visualizzato in "Pacchetti", quindi è necessario eseguire i metodi di cui sopra
zazu

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.