2011-08-08 14 views
362

Chciałbym zwolnić pakiet bez konieczności ponownego uruchamiania R (głównie dlatego, że ponowne uruchamianie R, gdy próbuję różnych, konfliktowych pakietów staje się frustrujące, ale możliwe, że to może być używane w programie do korzystania z jednej funkcji, a następnie innego - chociaż odwoływanie się do przestrzeni nazw jest prawdopodobnie lepszym pomysłem do tego zastosowania).Jak wyładować pakiet bez restartowania R?

nie wyświetla żadnych opcji, które mogłyby wyładować paczkę.

Jest to pakiet suggestion że detach może zwolnić, ale po obu fail:

detach(vegan) 

Błąd w detach(vegan): nieprawidłowy name argumentem

detach("vegan") 

Błąd w detach("vegan") : nieprawidłowyArgument

Jak mogę więc wyładować paczkę?

+3

@Iterator: biblioteka to miejsce, w którym można znaleźć pakiety. (Nie są synonimami). '.libPaths()' podaje ścieżki do wszystkich bibliotek w twoim systemie. –

+13

@Richie: Dzięki. Rozumiem to w kontekście R, ale uważam, że użycie R powoduje przeciążenie lub dwuznaczne określenie terminu 'biblioteka' na dwa sposoby: 1 - nie jest to samo użycie' biblioteki' jak gdzie indziej, a 2 - termin jest używany w ' library() 'załadować ... nie bibliotekę, ale pakiet. – Iterator

+2

@Iterator Masz rację. To była odpowiedź, której potrzebowałem, a podczas szukania w Google użyłem "przeciwieństwa' require' "lub" cofnąć 'bibliotekę'", ponieważ tak zazwyczaj ładuję, erm, "pakiety". Więc prawidłowe napisanie sprawia, że ​​pytanie jest poprawniejsze, ale trudniejsze do znalezienia. – isomorphismes

Odpowiedz

458

Spróbuj tego (patrz ?detach więcej szczegółów):

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

Możliwe jest kilka wersji pakietu załadowane na raz (na przykład, jeśli masz wersję rozwojową i stabilny wersja w różnych bibliotekach). Aby odłączyć gwarancję, ż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) 
    } 
} 

Wykorzystanie jest na przykład

detach_package(vegan) 

lub

detach_package("vegan", TRUE) 
+2

@Hadley Rzeczywiście. Niecytowana wersja nie działa w najnowszej wersji R. Zaktualizowałem odpowiedź kohske, aby odzwierciedlić Twoje rozwiązanie. –

+0

@ AriB.Friedman, czy istnieje sposób na odłączenie kilku pakietów naraz? Kiedy ładuję, powiedz 'Hmisc', ładuje również' survival' i 'splajny', czy istnieje sposób na rozładowanie tych grup razem? –

+0

@EricFail Brzmi jak nowe pytanie? –

5

próbowałem co kohske napisał jako odpowiedź i mam błąd ponownie, więc zrobiłem kilka wyszukiwania i znaleźć ten, który pracował dla mnie (R 3.0.2):

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

lub też

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

Jaki błąd dostałeś? Ponieważ działa dla mnie (R 3.1). Drugim rozwiązaniem jest ta sama odpowiedź @koshke, tylko bez rozładowania (więc przestrzeń nazw pakietu nie jest rozładowywana). – alko989

+0

Mam ten sam błąd. chodzi o to, że dałem takie samo rozwiązanie jak @Kohske, ale z inną nazwą pakietu. oznacza to po prostu, że jeśli używasz pakietu: to powinno działać poprawnie, ale jeśli tego nie zrobisz, otrzymasz taki sam błąd jak w pytaniu. ;) –

+0

Czekaj ... więc próbowałeś wyładować pakiet, który nie został załadowany? I jesteś zaskoczony, że masz błąd? – Gregor

46

Można również użyć polecenia unloadNamespace, jak w:

unloadNamespace("sqldf") 

Funkcja odłącza nazw przed rozładunkiem go.

+3

to działało dla mnie, a pozostałe opcje nie zalecały. dzięki! – amok

18

można odznaczyć pole wyboru w przycisk RStudio (pakietów)

+6

Warto dodać, że powoduje to wykonanie polecenia 'detach (" package: packageToUnload ", unload = TRUE)' i nie różni się od [już zaproponowanego rozwiązania.] (Http://stackoverflow.com/a/6979989/1655567) – Konrad

0

Wystarczy przejść do okna wyjściowego, a następnie kliknij ikonę pakiety (znajduje się między Plot i Pomoc ikony). Usuń "zaznaczenie/znacznik wyboru" z paczki, którą chciałeś zwolnić.

Dla ponownie przy użyciu pakietu wystarczy umieścić „kleszcza lub sprawdź znak” z przodu opakowania lub użytku:

library (lme4) 
+0

Nie, chyba że masz własną niestandardową ścieżkę do biblioteki. Nie pojawia się w sekcji "Pakiety", więc musisz wykonać powyższe metody – zazu

4

Kiedy idziesz tam iz powrotem między skrypty mogą być tylko czasami konieczne do wyładowania paczki. Oto prosta instrukcja JEŻELI, która zapobiega ostrzeżeniom, które pojawiłyby się, gdybyś próbował wyładować pakiet, który nie był załadowany.

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

Włączenie tej opcji u góry skryptu może być pomocne.

Mam nadzieję, że ten dzień Ci się uda!

Powiązane problemy