Das Ändern des R-Standardbibliothekspfads mithilfe von .libPaths in Rprofile.site funktioniert nicht

205

Ich verwende R unter Windows, nicht als Administrator. Wenn ich ein Paket installiere, funktioniert der folgende Befehl nicht:

> install.packages("zoo")
Installing package(s) into ‘C:/Program Files/R/R-2.15.2/library’
(as ‘lib’ is unspecified)
Warning in install.packages :
  'lib = "C:/Program Files/R/R-2.15.2/library"' is not writable

Um ein Paket zu installieren, muss ich einen Bibliotheksverzeichnis angeben:

install.packages("zoo", lib="C:/software/Rpackages")

Um ein Paket zu laden, muss ich auch den Speicherort der Bibliothek angeben:

library("zoo", lib.loc="C:/software/Rpackages")

All dies ist in Ordnung, aber ich wollte sehen, ob ich C:/software/Rpackagesden Bibliothekspfad irgendwie ergänzen kann und ihn daher nicht jedes Mal eingeben muss.

Als ich online suchte, stellte ich fest, dass eine Möglichkeit, dies zu tun, darin besteht, die Rprofile.siteDatei zu bearbeiten und die Zeile hinzuzufügen

.libPaths("C:/software/Rpackages")

Nachdem ich dies getan und RStudio gestartet habe, ist dies jedoch die Ausgabe, die ich erhalte

> .libPaths()
[1] "C:/Program Files/R/R-2.15.2/library" "C:/Program Files/RStudio/R/library" 

Der .libPathsBefehl, den ich dem hinzugefügt habe, Rprofile.sitescheint keine Wirkung gehabt zu haben! Warum ist das so? Oder, was noch wichtiger ist, wie kann ich das Problem beheben, damit ich Pakete installieren und laden kann, ohne den Speicherort der Bibliothek eingeben zu müssen?

Hinweis: Wenn ich RStudio starte, .libPaths()scheint der Befehl so zu funktionieren, wie er soll

.libPaths("C:/software/Rpackages")
> .libPaths()
[1] "C:/software/Rpackages"               "C:/Program Files/R/R-2.15.2/library"

Ist das nicht seltsam?

Ich mag es zu codieren
quelle
Können Sie etwas näher erläutern, wie genau install.packages("zoo")das nicht funktioniert? Fehlermeldung usw.?
Joran
1
@joran ich hinzugefügt , um die Fehlermeldung , wenn ich versuche , install.packages("zoo")--- aber das ist nicht meine eigentliche Frage, die im Begriff ist , warum .libPaths()in Rprofile.sitenicht funktioniert.
Ich mag es, den
1
Haben Sie die gleichen Probleme, wenn Sie RGui anstelle von R Studio verwenden?
Dason
6
Warum werden in den Bibliothekspfaden von R standardmäßig Ordner verwendet, für die Administratorrechte erforderlich sind?! Sicherlich wäre das Home-Verzeichnis des Benutzers sinnvoller
Geotheory
superuser.com/questions/749283/… Edit ~ / .Renviron R_LIBS_USER = / some / path
bowen.li

Antworten:

171

Ich versuche im Allgemeinen, alle meine Pakete in einer Bibliothek zu behalten. Wenn Sie jedoch eine Bibliothek hinzufügen möchten, hängen Sie die neue Bibliothek (die bereits in Ihrem Dateisystem vorhanden sein muss) an den vorhandenen Bibliothekspfad an.

.libPaths( c( .libPaths(), "~/userLibrary") )

Oder (und dies macht die userLibrary zum ersten Ort, an dem neue Pakete abgelegt werden):

.libPaths( c( "~/userLibrary" , .libPaths() ) )

Dann bekomme ich (zumindest damals, als ich das ursprünglich geschrieben habe):

> .libPaths()
[1] "/Library/Frameworks/R.framework/Versions/2.15/Resources/library"
[2] "/Users/user_name/userLibrary"  

Die .libPathsFunktion unterscheidet sich ein wenig von den meisten anderen nichtgrafischen Funktionen. Es funktioniert über Nebenwirkungen. Die Funktionen Sys.getenvund Sys.setenvdas Melden und Ändern der R-Umgebungsvariablen wurden aufgeteilt, .libPathskönnen jedoch das Ziel entweder melden oder ändern.

Die Informationen zum R-Startvorgang finden Sie auf der ?StartupHilfeseite. RStudio-Material finden Sie unter: https://support.rstudio.com/hc/en-us/articles/200549016-Customizing-RStudio

In Ihrem Fall scheint RStudio die Einstellungen von Rprofile.site nicht zu berücksichtigen oder sie möglicherweise zu überschreiben, indem eine .Rprofile-Einstellung aus einer der RStudio-Standardeinstellungen gelesen wird. Es sollte auch erwähnt werden, dass das Ergebnis dieser Operation auch den Inhalt von Aufrufen an .Libraryund anhängt .Library.site, was ein weiterer Grund ist, warum ein RStudio- (oder eine andere IDE oder ein installiertes Netzwerk) gehostetes R möglicherweise ein anderes Verhalten aufweist.

Da Sys.getenv()die aktuelle Systemumgebung für den R-Prozess zurückgegeben wird, können Sie die Bibliothek und andere Pfade mit folgenden Elementen anzeigen:

Sys.getenv()[ grep("LIB|PATH", names(Sys.getenv())) ]

Die beiden, die für das Speichern und Zugreifen auf Pakete wichtig sind, sind (jetzt auf einer Linux-Box unterschiedlich):

R_LIBS_SITE                          /usr/local/lib/R/site-library:/usr/lib/R/site-library:/usr/lib/R/library
R_LIBS_USER                          /home/david/R/x86_64-pc-linux-gnu-library/3.5.1/
IRTFM
quelle
12
Ich musste den c()Vektor umkehren , um sicherzustellen, dass neue Bibliotheken in den benutzerdefinierten Ordner
verschoben werden
Hervorragender Punkt. Tatsächlich hat die .libPaths-Funktion standardmäßig den gleichen Effekt. Es gibt auch einen Unterschied zwischen Betriebssystemen darin, wie nachgestellte Schrägstriche behandelt werden. (Unter Windows nicht OK). Andere Optionen sind vorhanden. Siehe?.libPaths
IRTFM
5
Der neue Pfad muss tatsächlich im Dateisystem vorhanden sein, sonst wird er nicht zum Bibliothekspfad hinzugefügt
jarandaf
Ein weiterer guter Punkt. Obwohl der Funktionsname etwas anderes vorschlägt, können Sie zuerst prüfen file.existsund nur fortfahren, wenn der Pfad nicht fehlt.
IRTFM
3
Ich habe das getan und es funktioniert, aber es scheint, dass ich den Pfad jedes Mal ändern muss, wenn ich R starte. Ist das für andere auch so?
Cyrusjan
213

Die richtige Lösung besteht darin, die Umgebungsvariable R_LIBS_USERauf den Wert des Dateipfads zu Ihrem gewünschten Bibliotheksordner festzulegen, anstatt RStudio zu veranlassen, eine Rprofile.site-Datei zu erkennen.

Um Umgebungsvariablen R_LIBS_USERin Windows festzulegen, gehen Sie in der Systemsteuerung (Systemeigenschaften -> Erweiterte Systemeigenschaften -> Umgebungsvariablen -> Benutzervariablen) auf einen gewünschten Wert (den Pfad zu Ihrem Bibliotheksordner), z

Variable name: R_LIBS_USER 
Variable value: C:/software/Rpackages  

Durch Festlegen von R_LIBS_USER wird sichergestellt, dass die Bibliothek zuerst in .libPaths () angezeigt wird, unabhängig davon, ob RStudio direkt oder durch Klicken mit der rechten Maustaste auf eine Datei und "Öffnen mit" zum Starten von RStudio gestartet wird.

Die Rprofile-Lösung kann funktionieren, wenn RStudio immer durch Klicken auf die Verknüpfung RStudio gestartet wird. In diesem Fall reicht es aus, das Standardarbeitsverzeichnis auf das Verzeichnis festzulegen, in dem sich Ihr Rprofile befindet. Die Rprofile-Lösung funktioniert nicht, wenn Sie auf eine Datei klicken, um RStudio zu starten, da dadurch das Arbeitsverzeichnis vom Standardarbeitsverzeichnis abweicht.

Paweł Rumian
quelle
2
Vereinbarte richtige Lösung!
felixmc
14
Auf jeden Fall die richtige Lösung. Der einzige Haken ist, wenn Ihr Benutzer kein Administrator ist (wahrscheinlich, wenn Sie dieses Problem haben), müssen Sie Ihre Umgebungsvariablen über Systemsteuerung-> Benutzerkonten-> Benutzerkonten-> Meine Umgebung ändern ändern Variablen.
David Moye
1
Kennen Sie (zufällig) das Äquivalent in der Linux-Befehlszeile?
Diego-MX
5
Sicher, setzen Sie diese einfach als Ihre Shell-Variablen (in Bash können Sie bearbeiten .bash_profileund / oder .bashrc). Siehe hier: unix.stackexchange.com/questions/117467/… Um diese für die aktuelle Sitzung festzulegen, geben Sie nur die Konsole einexport R_LIBS_USER='directory_of_your_choice'
Paweł Rumian
2
Anstatt die Variable über die Systemsteuerung festzulegen, habe ich den Standardwert von R_LIB_USER in der Rprofile-Datei geändert. Hier die Lösung: Ich habe einen ähnlichen Ansatz gefunden, die Lösung wird als Lösung für diese Frage präsentiert. Stackoverflow.com/questions/31707941/…
Marco
24

Ich habe es geschafft, das Problem zu lösen, indem ich den Code in der .RprofileDatei im Standardarbeitsverzeichnis abgelegt habe.

Zuerst habe ich den Speicherort des Standardarbeitsverzeichnisses gefunden

> getwd()
[1] "C:/Users/me/Documents"

Dann habe ich einen Texteditor verwendet, um eine einfache .RprofileDatei mit der folgenden Zeile zu schreiben

.libPaths("C:/software/Rpackages")

Wenn ich schließlich starte Rund starte, .libPaths()erhalte ich die gewünschte Ausgabe:

> .libPaths()
[1] "C:/software/Rpackages"               "C:/Program Files/R/R-2.15.2/library"
[3] "C:/Program Files/RStudio/R/library"
Ich mag es zu codieren
quelle
Dies funktioniert bei mir nicht (auch nicht bei der Lösung von BondedDust). Ich habe eine txt-Datei erstellt und als .Rprofile im Ordner von getwd () gespeichert.
John
2
@ John Ich glaube, dass wir das gleiche sagen.
Ich mag es, den
3
R liest .Rprofile aus Ihrem HOME- Verzeichnis, nicht aus Ihrem CURRENT- Verzeichnis.
Crt
Ich habe mir einen ähnlichen Ansatz ausgedacht.
Marco
Um die Home-Direktive zu finden, geben Sie den Befehl r Sys.getenv("HOME")in der r-Konsole ein. Ich bin nicht sicher, ob Sie die gewünschte Ausgabe erhalten. Ich denke, die gewünschte Ausgabe ist die, die 42 in seiner Antwort stackoverflow.com/a/15170774/754550 gezeigt hat . Er verwendet .libPaths auf eine etwas andere Art und Weise.
Wunder173
11

Ich habe hier eine Lösung gefunden (danke Carl Schwarz von der SFU) für das Hinzufügen einer persönlichen Bibliothek, die permanent (Sie müssen sie nicht in jeder Sitzung definieren) erkannt wird, ob R oder Rstudio verwendet wird, und Rstudio behandelt sie als Standard auf meinem Mac-Computer. Ich hatte nicht gesehen, dass dies explizit auf SO ausgelegt war, also fasste ich die Schritte zusammen, die sie für Windows und dann für Mac bereitstellten.

Für ein Windows 7-Betriebssystem:

  1. Erstellen Sie ein Verzeichnis auf dem Laufwerk, in dem Sie Ihre persönliche Bibliothek haben möchten, z. B. C: \ User \ Rlibs (oder ein anderes, für das Sie Berechtigungen haben).

  2. Suchen Sie in der Windows-Suchleiste nach "Umgebungsvariable für Ihr Konto bearbeiten", um die Einstellungen der Systemsteuerung zu bearbeiten

  3. Klicken Sie in der Mitte des Fensters "Umgebungsvariablen" auf "Neu ..."

  4. Geben Sie im Fenster "Neue Benutzervariable" R_LIBS als "Variablennamen" und den Pfad zu dem von Ihnen erstellten Verzeichnis der persönlichen Bibliothek ein, z. B. C: \ User \ Rlibs

  5. Klicken Sie auf OK, und das Fenster Variable / Wert sollte im Fenster Benutzervariablen angezeigt werden

  6. Klicken Sie erneut auf OK

Wenn Sie nun R (oder Rstudio) starten und den Befehl eingeben .libPaths(), sollten Sie die von Ihnen erstellte persönliche Bibliothek sowie die R-Systembibliothek sehen.

Für Mac:

  1. Erstellen Sie in Ihrem Verzeichnis "Home" oder "Benutzername" einen Ordner mit dem Namen " Rlibs"

  2. Starten Sie die Terminal-Anwendung

  3. Typ: echo "R_LIBS=~/Rlibs"> .RenvrionStellen Sie sicher, dass der Fall übereinstimmt.

  4. Geben Sie ls -adie vollständige Liste der Dateien in dem Verzeichnis , um zu sehen, was sollte nun auch .Renvrion

  5. Stellen Sie sicher, dass die .Renviron- Datei richtig eingestellt wurde:more .Renviron

Starten Sie R / Rstudio und geben .libPaths()Sie ein. Der neue Pfad zu Ihrer persönlichen Bibliothek sollte angezeigt werden .

Whalen
quelle
8

Wenn Sie keine Administratorrechte haben, kann es auch hilfreich sein, die Rprofile.siteDatei in \ R-3.1.0 \ etc zu öffnen und Folgendes hinzuzufügen:

.First <- function(){
  .libPaths("your path here")
}

Dies wertet den .libPath()Befehl direkt beim Start aus

schlusie
quelle
4

Ich hatte wirklich Probleme, das zu verstehen. gorkypl hat die richtige Lösung oben angegeben, als ich mein OS & Rstudio das letzte Mal neu installiert habe, aber dieses Mal wurde das Festlegen meiner Umgebungsvariablen nicht aufgelöst.

Deinstallieren Sie sowohl R als auch Rstudio, erstellen Sie die Verzeichnisse C: \ R und C: \ Rstudio und installieren Sie beide neu.

Definieren Sie die Benutzervariable R_LIBS_USER in Ihrem bevorzugten Verzeichnis (gemäß der Antwort von gorkypl) und starten Sie Ihren Computer neu, damit die Benutzervariable geladen werden kann. Öffnen Sie Rstudio, Fehler sollten verschwunden sein.

Sie können Sys.setenv()R_LIBS_USER auch in den Pfad Ihrer alternativen Bibliothek ändern, was einfacher ist und keinen Neustart Ihres Computers erforderlich macht.

So sehen Sie, auf was R_LIBS_USER eingestellt ist: ?Sys.getenv()

Lesen help(Startup)ist nützlich.

felixmc
quelle
2

Wenn Ihre Standardpaketbibliothek nach der Installation einer neuen Version von R oder auf andere Weise geändert wurde, können Sie beide Bibliotheken anhängen, um mithilfe der folgenden Befehle alle Pakete zu verwenden. Holen Sie sich den vorhandenen Bibliothekspfad:

.libPaths()

Stellen Sie nun den vorhandenen und den alten Pfad ein:

.libPaths(c(.libPaths(), "~/yourOldPath"))

Ich hoffe es hilft.

Shivong Birla
quelle
2

Ändern Sie einfach den Standardordner für Ihre R-Bibliotheken in einem Verzeichnis ohne Administratorrechte, z

.libPaths("C:/R/libs")
Sébastien Wieckowski
quelle
1

Ich habe die Readme gelesen. In diesem Fall verwenden Sie .libPaths () in der Befehlszeile, um zu überprüfen, welche Pfade vorhanden sind. Ich hatte früher 2 Bibliothekspfade. Als ich den gewünschten Befehl .libpath ("C: / Programme / R / R-3.2.4revised / library") verwendet habe, hat er den Bibliothekspfad geändert. Als ich .libPaths () erneut in die Befehlszeile eingab, zeigte es mir den richtigen Pfad. Hoffe das hilft

Supriya Deverkonda
quelle
1

Unter Ubuntu besteht die empfohlene Methode zum Ändern des Standardbibliothekspfads für einen Benutzer darin, die R_LIBS_USERVariable in der ~/.RenvironDatei festzulegen.

touch ~/.Renviron
echo "R_LIBS_USER=/custom/path/in/absolute/form" >> ~/.Renviron
tzabal
quelle
0
getwd()
# [1] "C:/Users/..../software/My R studio"

Kopieren Sie den obigen Link mit doppeltem Anführungszeichen

.libPaths(new="C:/Users/..../software/My R studio")

Ihr Standardpfad ändert sich für die Installation von Paketen

Sagte Mohammed Zeeshan
quelle
0

Wenn Sie Ihren Bibliothekspfad bei jeder Eingabe in R dauerhaft ändern möchten (ohne .libPath () aufzurufen, funktioniert dies für mich:

  1. Erstellen Sie ein Profil unter Ihrem Home-Verzeichnis. (~ / .Rprofil)

  2. Geben Sie .libPaths(c( .libPaths(), "your new path" )) in .Rprofile Datei, Speichern.

  3. Öffnen Sie R (ein beliebiges Verzeichnis) und überprüfen Sie, geben Sie einfach ein .libPaths(), Sie können feststellen, dass Ihr libaray-Pfad aktualisiert wurde!

Pengyao
quelle
-1

Ich habe dies untersucht, weil R Probleme bei der Installation am Standardspeicherort hatte und stattdessen nur die Pakete in den temporären Ordner legte. Es stellte sich heraus, dass es sich um das neueste Update für Mcaffee Endpoint Security handelt, bei dem offenbar Probleme mit R auftreten. Sie können den Bedrohungsschutz deaktivieren, während Sie die Pakete installieren, und es funktioniert ordnungsgemäß.

Kristen Bystrom
quelle