R install.packages gibt "Sperrverzeichnis konnte nicht erstellt werden" zurück.

73

Beim Herunterladen des Rcpp-Pakets wird folgende Fehlermeldung angezeigt:

> install.packages("Rcpp", dependencies=TRUE)
Installing package(s) into ‘/home/me/src/Rlibs’ (as ‘lib’ is unspecified)
trying URL 'http://cran.us.r-project.org/src/contrib/Rcpp_0.10.2.tar.gz'
Content type 'application/x-gzip' length 2380089 bytes (2.3 Mb)
...
Warning in dir.create(lockdir, recursive = TRUE) :
  cannot create dir '/home', reason 'Permission denied'
ERROR: failed to create lock directory ‘/home/me/src/Rlibs/00LOCK-Rcpp’
...

Da sich mein Computer in einem Computercluster befindet, habe ich es auf verschiedenen Knoten versucht und darauf geachtet, die in / tmp heruntergeladenen temporären Dateien zu löschen. Was seltsam ist, ist, dass ich das Recht habe, in / home / me / src / Rlibs / zu schreiben. Meine Fragen sind also:

  1. Warum möchte R Schreibrechte in / home haben, während es nur Schreibrechte in / home / me / benötigt?
  2. Wie kann ich den Fehler beheben?

> sessionInfo()
R version 2.15.2 (2012-10-26)
Platform: x86_64-redhat-linux-gnu (64-bit)
locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
 [7] LC_PAPER=C                 LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C
 [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base
loaded via a namespace (and not attached):
[1] tools_2.15.2
tflutre
quelle

Antworten:

139

Auf NFS-Dateisystemen ist es manchmal nicht offensichtlich, welche Dinge Sie schließen müssen.

Der beste Weg, dies zu vermeiden, besteht darin, das --no-lockArgument in der Befehlszeile zu verwenden, dh:

R CMD INSTALL --no-lock <pkg>

Innerhalb von R können Sie dies innerhalb Ihres Befehls tun, indem Sie:

install.packages("Rcpp", dependencies = TRUE, INSTALL_opts = '--no-lock')
Jimmyb
quelle
3
Dies hat das Problem auch für mich behoben, aber ich bin bei @Garini. Was verursacht die Dateisperre?
rjkunde
@rjkunde, ich versuche auch dieses Problem zu verstehen. Ich sehe, dass der Ordner 00LOCK manchmal erstellt wird, wenn ich das Paket (oder eine Abhängigkeit) bereits installiert habe und ein Problem (kein Fehler) vorliegt install.packages().
Ale
1
Nach meiner Erfahrung war hauptsächlich das gemeinsam genutzte Dateisystem NFS schuld. Jemand mit viel mehr Wissen über die Handhabung von Paketverwaltungsdateien wird mich hoffentlich ansprechen und korrigieren, aber ich nahm an, dass dies mit mehreren verteilten R-Prozessen zusammenhängt, die über den SGE-Cluster verteilt sind und versuchen, mit den Paketindexdateien in LIB_PATH und der Latenz der Bereinigung zu interagieren Sperrdatei im NFS-Dateisystem.
Jimmyb
Danke für den Einblick! Da mein Problem darin bestand, dass ich den 00LOCK-Ordner innerhalb derselben R-Sitzung aufgrund einer nicht entfernbaren NFS-Datei nicht entfernen konnte, gehe ich bei der Installation eines Pakets jedes zu importierende Paket (und das Paket selbst) durch und trenne es , entfernen Sie es, installieren Sie es erneut und befestigen Sie es erneut. Auf diese Weise scheint es bisher keinen Ordner 00LOCK mehr zu geben, nachdem alle Pakete installiert wurden. Dies ohne zu verwenden INSTALL_opts = c('--no-lock').
Ale
Interessant, ich treffe dieses Problem unter OS X ohne NFS. Aber Ihre Lösung hat funktioniert.
Carbokation
29

Dies geschieht, wenn Ihre letzte Paketinstallation abnormal unterbrochen wurde. Um dies zu beheben, sollten Sie die gesperrte Datei entfernen. Beispiel: Führen Sie diesen Befehl in der R-Konsole aus:

unlink("/home/me/src/Rlibs/00LOCK-Rcpp", recursive = TRUE)

Hoffe das hilft!

Sina
quelle
6
Das Löschen der Datei hilft auch
Adam Lee Perelman
3
Manchmal unlinkwird die Ordneranzeige nicht entfernt. Es ist erforderlich, die R-Sitzung neu zu starten.
Ale
1
Das Problem wurde für mich behoben.
Thorgas
Das Entfernen des gesamten Verzeichnisses funktionierte rekursiv für mich
Mohammed
0

Dies kann auch passieren, wenn Sie ein Upgrade auf eine Hauptversion des R durchführen. Bei einigen größeren Upgrades müssen Sie Ihre Pakete neu erstellen, z. B. R 4.0. In meinem Fall hatte ich R mit Homebrew installiert brew install Rund lange gewartet, aber als ich auf 4 aktualisiert habe, musste ich die Pakete erneut erstellen und stieß auf dieses Problem.

Um das Problem zu beheben, müssen Sie sicherstellen, dass Homebrew Reste Ihrer älteren R-Installation entfernt. In der Standardeinstellung finden Sie sie hier /usr/local/lib/R. Ich hatte Instanzen von 3.5und 3.6neben dem Rest von Rs internen. Sie können dort alles entfernen und R erneut installieren, und alles sollte einwandfrei funktionieren. Oder entfernen Sie einfach die ältere Version von R und leeren Sie die 4.0. Ich empfehle jedoch eine Neuinstallation.

Also, wenn Sie Ihre R mit Homebrew pflegen und lief in dieses Problem, hier ist , wie Sie es zu beheben:

brew uninstall R
rm -r /usr/local/lib/R
brew install R
Amir
quelle
-1

Ich habe ein ähnliches Problem beim Ausführen von Windows 7 festgestellt:

Fehler in install.packages: FEHLER: Das Verzeichnis 'D: \ Programme \ R \ R-3.6.2 \ library' konnte nicht geändert werden.

Ich habe dieses Problem mit dem folgenden Befehl in der R-Konsole gelöst:

unlink("D:\\Program Files\\R\\R-3.6.2\\library/00LOCK", recursive = TRUE)

Hoffe das hilft Windows Benutzern ...

PatrickC
quelle