Jak rozładować paczkę bez restartu R

Chciałbym rozładować pakiet bez konieczności restartowania R (głównie dlatego, że restartowanie r podczas testowania różnych, sprzecznych pakietów staje się frustrujące, ale możliwe, że może to być użyte w programie do używania jednej funkcji, a następnie innej--chociaż odwoływanie się do przestrzeni nazw jest prawdopodobnie lepszym pomysłem do tego zastosowania).

?library nie pokazuje żadnych opcji, które mogłyby rozładować pakiet.

Istnieje sugestia że detach może rozładować paczkę, ale po obu fail:

detach(vegan)

Error in detach(vegan): invalid name argument

detach("vegan")

Error in detach("vegan"): invalid name argument

Jak rozładować paczkę?

Author: NelsonGon, 2011-08-08

11 answers

Spróbuj tego (Zobacz ?detach Po Więcej Szczegółów):

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

Możliwe jest jednoczesne załadowanie wielu wersji pakietu (na przykład, jeśli masz wersję rozwojową i stabilną w różnych bibliotekach). Aby zagwarantować, że wszystkie kopie są odłączone, użyj tej funkcji.

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)
  }
}

Użycie jest, na przykład

detach_package(vegan)

Lub

detach_package("vegan", TRUE)
 714
Author: kohske,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-16 15:13:23

Możesz również użyć polecenia unloadNamespace, Jak w:

unloadNamespace("sqldf")

Funkcja odłącza przestrzeń nazw przed jej rozładowaniem.

 95
Author: rstober,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-20 20:07:17

Możesz odznaczyć przycisk checkbox w RStudio (Pakiety).

Panel pakietów RStudio

 36
Author: Ajay Ohri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-03 18:06:44

Próbowałem tego, co kohske napisał jako odpowiedź i znowu dostałem błąd, więc zrobiłem trochę wyszukiwania i znalazłem to, co działało dla mnie (R 3.0.2):

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

Lub też

library(splines)
pkg <- "package:splines"
detach(pkg, character.only = TRUE)
 10
Author: Mehrad Mahmoudian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-11 01:16:30

Gdy przechodzisz między skryptami, może być tylko czasami konieczne rozładowanie pakietu. Oto prosta instrukcja IF, która zapobiega pojawianiu się ostrzeżeń w przypadku próby rozładowania pakietu, który nie został aktualnie załadowany.

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

Włączenie tego na górze skryptu może być pomocne.

Mam nadzieję, że to sprawi, że twój dzień!

 9
Author: dca,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-26 19:38:27

detach(package:PackageName) działa i nie ma potrzeby stosowania cudzysłowów.

 8
Author: Alper Gur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-03 16:43:19

Możesz wypróbować wszystko, co chcesz usunąć za pomocą unloadNamespace(), ale footprint pamięci nadal będzie trwał. I nie, detach("package:,packageName", unload=TRUE, force = TRUE) też nie zadziała.

Z nowej konsoli lub Session > Restart R sprawdź pamięć za pomocą pakietu pryr:

pryr::mem_used()

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

Sprawdź moje 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   

Załadujmy pakiet Seurat i sprawdźmy nowy footprint pamięci :

library(Seurat)
pryr::mem_used()

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

Użyjmy unloadNamespace() aby usunąć wszystko:

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")

Teraz sprawdź 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 

Sprawdź ślad pamięci :

pryr::mem_used()

# 173 MB

Link do screen-cast demonstration

 5
Author: Matthew J. Oldach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-16 01:48:59

Chciałbym dodać alternatywne rozwiązanie. To rozwiązanie nie odpowiada bezpośrednio na twoje pytanie dotyczące rozładunku pakietu, ale, IMHO, zapewnia czystszą alternatywę do osiągnięcia pożądanego celu, co rozumiem, jest szeroko związane z unikaniem konfliktów nazw i próbowaniem różnych funkcji, jak stwierdzono:

Głównie dlatego, że restartowanie R podczas testowania różnych, sprzecznych pakietów staje się frustrujące, ale możliwe, że można to wykorzystać w programie, aby użyć jednego funkcja, a następnie inna--chociaż odwołanie się do przestrzeni nazw jest prawdopodobnie lepszym pomysłem do tego użycia

Rozwiązanie

Funkcja with_package oferowane za pośrednictwem withr pakiet oferuje możliwość:

Dołącza pakiet do ścieżki wyszukiwania, wykonuje kod, a następnie usuwa pakiet ze ścieżki wyszukiwania. Przestrzeń nazw pakietów jest Nie jednak bez ładunku.

Przykład

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 używany w przykład nie jest dostępny z globalnej przestrzeni nazw. Myślę, że może to być czystszy sposób radzenia sobie z konfliktami niż załadunek i rozładunek paczek.

 2
Author: Konrad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-03 18:02:46

Zauważ również, że możesz użyć unload() tylko raz. Jeśli użyjesz go po raz drugi bez ponownego uruchomienia library(), otrzymasz niezbyt pouczający komunikat o błędzie nieprawidłowy argument "name" :

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

stworzony 2020-05-09 przez pakiet reprex (v0.3.0)

 2
Author: Matifou,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-10 01:38:26

Inną opcją jest

devtools::unload("your-package")

To najwyraźniej dotyczy również kwestii zarejestrowanych metod S3, które nie są usuwane z unloadNamespace()

 1
Author: tjebo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-05 11:50:56

Po prostu przejdź do okna wyjściowego, a następnie kliknij ikonę Packages(znajduje się pomiędzy ikonami Plot I Help). Usuń " zaznacz / zaznacz" z opakowania, które chcesz rozładować.

Aby ponownie użyć paczki, po prostu umieść " zaznacz lub zaznacz" przed paczką lub użyj :

library (lme4)
 0
Author: EsKe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-01 22:26:13