Während ich daran arbeitete, ein anderes Problem zu lösen, bekam ich dieses Problem:
Ich kann alle R-Objekte entfernen durch:
rm(list = ls(all = TRUE))
Gibt es einen entsprechenden Befehl, mit dem installierte Pakete während der Arbeitssitzung getrennt werden können?
> sessionInfo()
R version 2.12.2 (2011-02-25)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
erfordern (ggplot2)
Loading required package: ggplot2
Loading required package: reshape
Loading required package: plyr
Attaching package: 'reshape'
The following object(s) are masked from 'package:plyr':
round_any
Loading required package: grid
Loading required package: proto
sessionInfo ()
R version 2.12.2 (2011-02-25)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] grid stats graphics grDevices utils datasets methods
[8] base
other attached packages:
[1] ggplot2_0.8.9 proto_0.3-9.1 reshape_0.8.4 plyr_1.4
Ich habe es auf diese Weise versucht, obwohl es in keiner globalen Lösung funktioniert hat:
pkg <- c("package:ggplot2_0.8.9", "package:proto_0.3-9.1", "package:reshape_0.8.4", "package:plyr_1.4")
detach(pkg, character.only = TRUE)
Error in detach(pkg, character.only = TRUE) : invalid 'name' argument
In addition: Warning message:
In if (is.na(pos)) stop("invalid 'name' argument") :
the condition has length > 1 and only the first element will be used
Was ich suche, ist etwas Globales wie:
rm(list = ls(all = TRUE))
Erwarten Sie für Objekte, dass angehängte Basispakete nicht entfernt werden
Vielen Dank;
R CMD check
ein Paket zu übergeben, soll es sich sauber entladen, also erwartet R Core, dass dies möglich ist und etwas, das man vielleicht tun möchte.Antworten:
Also hätte jemand einfach folgendes beantworten sollen.
(bearbeiten: 28.06.19) In der neuesten Version von R 3.6.0 verwenden Sie bitte stattdessen.
Beachten Sie, dass die Verwendung von unsichtbar (*) nicht erforderlich ist, aber nützlich sein kann, um zu verhindern, dass die NULL-Antwort das R-Fenster vertikal spammt.
(Bearbeiten: 20.09.2019) In Version 3.6.1
Es kann hilfreich sein, geladene
names(sessionInfo()$loadedOnly)
Pakete zuerst nur in explizit angehängte Pakete zu konvertieren und dann die Pakete zu trennen.Man kann sich über $ basePkgs zu entladen Basispakete versuchen , und auch versuchen , mit
unloadNamespace(loadedNamespaces())
. Diese sind jedoch in der Regel mit Fehlern behaftet und können grundlegende Funktionen beeinträchtigen, z. B.sessionInfo()
nur Fehler zurückgeben. Dies tritt typischerweise aufgrund einer mangelnden Reversibilität im Design der Originalverpackung auf. DerzeittimeDate
kann zum Beispiel irreversibel brechen.quelle
invisible(lapply(paste0('package:', names(sessionInfo()$otherPkgs)), detach, character.only=TRUE, unload=TRUE))
Ergebnissen in einemError in FUN(X[[i]], ...) : invalid 'name' argument
FehlerError in FUN(X[[i]], ...)...
tritt häufig auf, wenn nur ein NULL-Wert vorhanden ist. Man kann das mit testennames(sessionInfo()$otherPkgs)
. Wenn es zurückkehrtNULL
, ist dies die Ursache.Bitte versuchen Sie dies:
quelle
plyr
unddplyr
es scheint der einzige Weg zu sein. Vielen Dank!Du warst nah. Beachten Sie, was
?detach
zu dem ersten Argumentname
von zu sagen istdetach()
:Wir müssen also wiederholt
detach()
einmal pro Element von aufrufenpkg
. Es gibt noch einige andere Argumente, die wir angeben müssen, damit dies funktioniert. Das erste istcharacter.only = TRUE
, dass die Funktion annehmen kann, dassname
es sich um eine Zeichenfolge handelt - ohne sie funktioniert es nicht. Zweitens möchten wir wahrscheinlich auch den zugehörigen Namespace entladen. Dies kann durch Einstellen erreicht werdenunload = TRUE
. Die Lösung lautet also zum Beispiel:Hier ist ein vollständiges Beispiel:
Wenn Sie dies in eine Funktion umwandeln möchten, lesen Sie den Code
sessionInfo()
, um festzustellen, wie er die Kennzeichnung als "andere angehängte Pakete:" identifiziert. Kombinieren Sie diesen Code mit der obigen Idee in einer einzigen Funktion und Sie sind zu Hause und trocken. Das überlasse ich dir allerdings.quelle
pkgs = names(sessionInfo()$otherPkgs)
undpkgs = paste('package:', pkgs, sep = "")
force=TRUE
falls die Pakete Abhängigkeiten aufweisen.nothing
Es kann sich lohnen, eine von Romain François zur Verfügung gestellte Lösung hinzuzufügen . Beim Laden entlädt das Paket
nothing
, das derzeit auf GitHub verfügbar ist , alle geladenen Pakete. wie in dem Beispiel, das Romain liefert:Installation
Bei Verwendung des
devtools
Pakets:pacman
Ein alternativer Ansatz verwendet ein
pacman
über CRAN verfügbares Paket:quelle
pacman::p_unload("all")
würde vielleicht auch funktionieren?Aufbauend auf Gavins Antwort, aber nicht ganz zu einer vollen Funktion, wäre diese Sequenz:
quelle
lapply(paste("package:", names(sessionInfo()$otherPkgs), sep=""), detach, character.only = TRUE, unload = TRUE)
. Würde ohne deine Antwort niemals dorthin gelangen!Wenn Sie über RStudio verfügen, deaktivieren Sie einfach alle Kontrollkästchen auf der Registerkarte "Pakete", um die Verbindung zu trennen
quelle
Dadurch wird sichergestellt, dass alle Pakete außer Ihren Basispaketen getrennt werden
quelle
Meistens ist es das
plyr
vs-dplyr
Problem. Verwenden Sie dies am Anfang des Codes:Wenn das Skript ausgeführt wird, wird das
plyr
Paket gelöschtquelle
Wenn Sie Probleme mit Paketen haben, deren Funktionen ähnlich benannte Funktionen in Konflikt miteinander stehen, können Sie immer auf den Namespace des Pakets verweisen, dessen Funktion Sie möchten.
quelle
Das Kombinieren von Bits aus verschiedenen Antworten ergab die robusteste Lösung, die ich finden konnte ...
quelle