Ich möchte ein Paket entladen, ohne R neu starten zu müssen (hauptsächlich, weil das Neustarten von R beim Ausprobieren verschiedener, widersprüchlicher Pakete frustrierend wird, aber möglicherweise könnte dies in einem Programm verwendet werden, um eine Funktion und dann eine andere zu verwenden - obwohl Namespace Referenzierung ist wahrscheinlich eine bessere Idee für diese Verwendung).
?library
zeigt keine Optionen an, die ein Paket entladen würden.
Es gibt einen Vorschlag , der detach
das Paket entladen kann, aber die folgenden beiden schlagen fehl:
detach(vegan)
Fehler in
detach(vegan)
: ungültigesname
Argument
detach("vegan")
Fehler in
detach("vegan")
: ungültigesname
Argument
Wie entlade ich ein Paket?
.libPaths()
Gibt Ihnen die Pfade zu allen Bibliotheken auf Ihrem System.library
auf zwei Arten überlastet oder mehrdeutig macht : 1 - es ist nicht die gleiche Verwendunglibrary
wie anderswo und 2 - der Begriff wirdlibrary()
zum Laden verwendet ... nicht a Bibliothek, aber ein Paket.require
" oder "Rückgängiglibrary
" verwendet, weil ich so normalerweise "Pakete" lade. Wenn Sie es also richtig betiteln, ist die Frage korrekter, aber auch schwieriger zu finden.Antworten:
Versuchen Sie dies (siehe
?detach
für weitere Details):Es ist möglich, mehrere Versionen eines Pakets gleichzeitig zu laden (z. B. wenn Sie eine Entwicklungsversion und eine stabile Version in verschiedenen Bibliotheken haben). Verwenden Sie diese Funktion, um sicherzustellen, dass alle Kopien getrennt werden.
Verwendung ist zum Beispiel
oder
quelle
> detach("package:MASS", unload=TRUE) Error in detach("package:MASS", unload = TRUE) : invalid 'name' argument
Sie können den
unloadNamespace
Befehl auch wie folgt verwenden:Die Funktion trennt den Namespace vor dem Entladen.
quelle
Sie können das Kontrollkästchen in RStudio (Pakete) deaktivieren.
quelle
detach("package:packageToUnload", unload=TRUE)
Befehl ausgeführt wird und sich nicht von der bereits vorgeschlagenen Lösung unterscheidet.Ich habe versucht, was kohske als Antwort geschrieben hat, und habe erneut einen Fehler erhalten. Deshalb habe ich eine Suche durchgeführt und diese gefunden, die für mich funktioniert hat (R 3.0.2):
oder auch
quelle
Wenn Sie zwischen Skripten hin und her gehen, ist es möglicherweise nur manchmal erforderlich, ein Paket zu entladen. Hier ist eine einfache IF-Anweisung, die Warnungen verhindert, die angezeigt werden, wenn Sie versuchen, ein Paket zu entladen, das derzeit nicht geladen wurde.
Das Einfügen oben in ein Skript kann hilfreich sein.
Ich hoffe das macht deinen Tag!
quelle
detach(package:PackageName)
funktioniert und es besteht keine Notwendigkeit, Anführungszeichen zu verwenden.quelle
Sie können alles versuchen , um ein Paket (und alle damit verbundenen Abhängigkeiten) zu entfernen,
unloadNamespace()
aber der Speicherbedarf bleibt bestehen. Und nein,detach("package:,packageName", unload=TRUE, force = TRUE)
wird auch nicht funktionieren.Von einer neuen Konsole oder
Session > Restart R
überprüfen Sie den Speicher mit dempryr
Paket:Prüfe mein
sessionInfo()
Laden wir das
Seurat
Paket und überprüfen den neuen Speicherbedarf :Verwenden wir
unloadNamespace()
, um alles zu entfernen:Überprüfen Sie nun
sessionInfo()
:Überprüfen Sie den Speicherbedarf :
Link zur Screencast-Demonstration
quelle
Ich möchte eine alternative Lösung hinzufügen. Diese Lösung beantwortet Ihre Frage zum Entladen eines Pakets nicht direkt , bietet jedoch meiner Meinung nach eine sauberere Alternative, um Ihr gewünschtes Ziel zu erreichen. Ich verstehe, dass es im Großen und Ganzen darum geht, Namenskonflikte zu vermeiden und verschiedene Funktionen auszuprobieren, wie angegeben:
Lösung
Die
with_package
über daswithr
Paket angebotene Funktion bietet die Möglichkeit:Beispiel
geom_point
Auf das im Beispiel verwendete Element kann nicht über den globalen Namespace zugegriffen werden. Ich denke, es ist eine sauberere Art, mit Konflikten umzugehen, als Pakete zu laden und zu entladen.quelle
Beachten Sie auch, dass Sie nur
unload()
einmal verwenden können. Wenn Sie es ein zweites Mal ohne erneuteslibrary()
Ausführen verwenden, wird die nicht sehr informative Fehlermeldung ungültiges Argument 'Name' angezeigt :Erstellt am 2020-05-09 durch das reprex-Paket (v0.3.0)
quelle
Gehen Sie einfach auf OUTPUT Fenster, dann klicken Sie auf Symbol Pakete (es zwischen befindet Plot und Help - Icons). Entfernen Sie " Häkchen / Häkchen " aus dem Paket, das entladen werden soll.
Wenn Sie das Paket erneut verwenden möchten, setzen Sie einfach ein Häkchen oder ein Häkchen vor das Paket oder verwenden Sie:
quelle
Eine andere Option ist
Diese scheinbar befasst sich auch mit der Frage der registrierten S3 Methoden , die nicht entfernt werden , mit
unloadNamespace()
quelle