Chciałbym zwolnić pakiet bez konieczności restartowania R (głównie dlatego, że restartowanie R podczas wypróbowywania różnych, pakiety powodujące konflikt stają się frustrujące, ale możliwe, że można to wykorzystać w programie do używania jednej funkcji, a następnie innej - chociaż przestrzeń nazw odwoływanie się jest prawdopodobnie lepszym pomysłem na takie zastosowanie).
?library
nie pokazuje żadnych opcji, które mogłyby zwolnić pakiet.
Istnieje sugestia, że detach
można zwolnić pakiet, ale oba następujące elementy kończą się niepowodzeniem:
detach(vegan)
Błąd w
detach(vegan)
: nieprawidłowyname
argument
detach("vegan")
Błąd w
detach("vegan")
: nieprawidłowyname
argument
Jak więc rozładować paczkę?
.libPaths()
Podaje ścieżki do wszystkich bibliotek w systemie.library
dwa sposoby: 1 - to nie to samo zastosowanie,library
co gdzie indziej, i 2 - termin jest używanylibrary()
do załadowania ... biblioteka, ale pakiet.require
” lub „cofnijlibrary
”, ponieważ tak zwykle ładuję, eerm, „paczki”. Właściwe nazwanie go sprawia, że pytanie jest poprawniejsze, ale trudniejsze do znalezienia.Odpowiedzi:
Spróbuj tego (zobacz
?detach
więcej szczegółów):Możliwe jest ładowanie wielu wersji pakietu jednocześnie (na przykład, jeśli masz wersję programistyczną i wersję stabilną w różnych bibliotekach). Aby zagwarantować odłączenie wszystkich kopii, użyj tej funkcji.
Wykorzystanie to na przykład
lub
źródło
> detach("package:MASS", unload=TRUE) Error in detach("package:MASS", unload = TRUE) : invalid 'name' argument
Możesz także użyć
unloadNamespace
polecenia, jak w:Funkcja odłącza przestrzeń nazw przed jej rozładowaniem.
źródło
Możesz odznaczyć przycisk pola wyboru w RStudio (pakiety).
źródło
detach("package:packageToUnload", unload=TRUE)
polecenia i nie różni się od proponowanego rozwiązania.Próbowałem tego, co napisał Kohske jako odpowiedź, i ponownie otrzymałem błąd, więc przeprowadziłem wyszukiwanie i znalazłem to, co zadziałało dla mnie (R 3.0.2):
lub też
źródło
Podczas przechodzenia między skryptami może być czasem konieczne rozładowanie pakietu. Oto prosta instrukcja JEŻELI, która zapobiegnie pojawianiu się ostrzeżeń, gdybyś próbował wyładować pakiet, który nie został aktualnie załadowany.
Dołączenie tego na początku skryptu może być pomocne.
Mam nadzieję, że to sprawi, że Twój dzień!
źródło
detach(package:PackageName)
działa i nie ma potrzeby używania cudzysłowów.źródło
Możesz wypróbować wszystko, co chcesz usunąć pakiet (i wszystkie związane z nim zależności),
unloadNamespace()
ale ślad pamięci pozostanie. I nie, teżdetach("package:,packageName", unload=TRUE, force = TRUE)
nie będzie działać.Z nowej konsoli lub
Session > Restart R
sprawdź pamięć za pomocąpryr
pakietu:Sprawdź mój
sessionInfo()
Załadujmy
Seurat
pakiet i sprawdźmy nowy ślad pamięci :Użyjmy,
unloadNamespace()
aby usunąć wszystko:Teraz sprawdź
sessionInfo()
:Sprawdź powierzchnię pamięci :
Link do pokazu obsady ekranu
źródło
Chciałbym dodać alternatywne rozwiązanie. To rozwiązanie nie odpowiada bezpośrednio na twoje pytanie dotyczące rozładowania pakietu, ale IMHO stanowi czystszą alternatywę dla osiągnięcia pożądanego celu, który, jak rozumiem, zasadniczo dotyczy unikania konfliktów nazw i wypróbowywania różnych funkcji, jak stwierdzono:
Rozwiązanie
Funkcja
with_package
oferowana przezwithr
pakiet oferuje możliwość:Przykład
geom_point
użyty w tym przykładzie nie jest dostępny z globalnej przestrzeni nazw. Myślę, że może to być czystszy sposób rozwiązywania konfliktów niż ładowanie i rozładowywanie paczek.źródło
Pamiętaj też, że możesz użyć tylko
unload()
raz. Jeśli użyjesz go po raz drugi bez ponownego uruchamianialibrary()
, otrzymasz niezbyt pouczający komunikat o błędzie, niepoprawny argument „name” :Utworzono 2020-05-09 przez pakiet reprezentx (v0.3.0)
źródło
Wystarczy przejść do okna WYJŚCIE, a następnie kliknąć ikonę Pakiety (znajduje się między ikonami Wykres i Pomoc ). Usuń „ tik / znacznik wyboru ” z paczki, którą chcesz rozładować.
Aby ponownie skorzystać z pakietu, po prostu umieść „ ptaszka lub znacznik wyboru ” przed paczką lub użyj:
źródło
Inną opcją jest
To widocznie również zajmuje się emisją zarejestrowane S3 metod, które nie są usuwane z
unloadNamespace()
źródło