Was soll passieren, wenn ein Paket in mehreren Bibliotheken installiert ist? Zum Beispiel kann man in Debian / Ubuntu debianisierte Pakete über apt-get installieren und dann auch eine neuere Version des gleichen Pakets direkt aus CRAN installieren. Wird bei Verwendung von library () das neueste Paket geladen oder hängt es von der Reihenfolge von .libPaths () ab?
Wie bereits von anderen angegeben, ist .libPaths()
search order matter, weshalb wir es so einstellen, dass lokale Pakete zuerst durchsucht werden, da die Distro-Versionen, insbesondere mit Debian stable oder Ubuntu Releases, die nicht aktualisiert werden, wahrscheinlicher sind älter.
In der Datei /etc/R/Renviron
gibt es einen Kommentar zu diesem Effekt:
Also würde ein benutzerdefinierter Wert von R_LIBS_SITE
Vorrang haben, ansonsten wird der hier gezeigte Wert verwendet.
Nach meinem Verständnis hängt dies von der Reihenfolge von .libPaths () ab. Dies ist Code von library
Und das ist von der Hilfeseite für find.package
Und wenn es mehr als eine Instanz gibt, dann sollte es eine Warnung geben, basierend auf dem Lesen des Codes find.package
(es sei denn, Sie setzen "verbose" auf FALSE):
Wenn Sie Pakete mit apt-get installieren, sind Sie der sudo-Benutzer, so dass Bibliotheken im systemweiten Speicherort (normalerweise / usr / lib / R) installiert werden.
Wenn Sie CRAN verwenden, können Sie auch sudo oder ein normaler Benutzer sein. Im ersten Fall werden Pakete systemweit installiert (überschreiben von Dateien, die mit apt-get installiert wurden); Im zweiten Fall werden die Pakete im $ HOME / R des Benutzers installiert.
Wo ein Paket sowohl in / usr / lib / R als auch in $ HOME / R existiert, wird der erste Ort in .libPaths () beim Laden verwendet (normalerweise $ HOME / R).
BEARBEITEN: Wie Dirk sagte, sollten systemweite Installationen nach / usr / local / lib / R /, nicht nach / usr / lib / R gehen. Mein allgemeiner Punkt ist jedoch: Der Installationsort hängt von den Benutzerberechtigungen ab, und die Reihenfolge des Ladens hängt von .libPaths () ab.