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)
: invalidname
argument
detach("vegan")
Error in
detach("vegan")
: invalidname
argument
Jak rozładować paczkę?
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)
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.
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
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)
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ń!
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.
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
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.
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)
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()
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)
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