R install.packages 返回“未能创建锁定目录”

Posted

技术标签:

【中文标题】R install.packages 返回“未能创建锁定目录”【英文标题】:R install.packages returns "failed to create lock directory" 【发布时间】:2013-01-01 04:14:34 【问题描述】:

下载 Rcpp 包时出现此错误:

> 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’
...

由于我的机器在计算机集群上,所以我在不同的节点上尝试过,我很小心地删除了/tmp中下载的临时文件。奇怪的是,我有权在 /home/me/src/Rlibs/ 中写入。所以我的问题是:

    为什么 R 想要在 /home 中拥有写入权限,而它只需要 /home/me/ 中的写入权限? 如何解决该错误?

> 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

【问题讨论】:

【参考方案1】:

避免此问题的最简单方法是在安装任何软件包之前运行以下行

options("install.lock"=FALSE)

然后尝试 install.packages("name_of_package") 安装包。不会出现 00LOCK 错误。

【讨论】:

这实际上对我有用。其他解决方案均无效。【参考方案2】:

当您升级到 R 的主要版本时,也会发生这种情况。一些主要的升级需要你重建你的包,例如,R 4.0。就我而言,我使用 Homebrew 安装了 R,brew install R 并维护了很长时间,但是当我升级到 4 时,我不得不再次构建包并遇到了这个问题。

要解决此问题,您需要确保 Homebrew 删除了旧 R 安装的剩余部分。默认设置下,您可以在这里找到它们,/usr/local/lib/R。除了 R 内部的其余部分之外,我还有 3.53.6 的实例。您可以删除那里的所有内容,然后再次安装 R,一切都应该可以正常工作。或者只是删除旧版本的 R,然后清空 4.0。不过,我建议进行全新安装。

所以,如果您使用 Homebrew 维护您的 R 并遇到了这个问题,您可以通过以下方式解决它:

brew uninstall R
rm -r /usr/local/lib/R
brew install R

【讨论】:

【参考方案3】:

在 NFS 文件系统上,您必须关闭哪些内容有时并不明显。

避免这种情况的最佳方法是在命令行中使用--no-lock 参数,即:

R CMD INSTALL --no-lock <pkg>

在 R 中,您可以使用以下命令在命令中执行此操作:

install.packages("Rcpp", dependencies = TRUE, INSTALL_opts = '--no-lock')

【讨论】:

这也解决了我的问题,但我和@Garini 在一起,是什么导致文件锁定? @rjkunde,我也在尝试理解这个问题。我看到文件夹 00LOCK 有时会在我已经安装包(或依赖项)并且install.packages() 中存在问题(不是错误)时创建。 根据我的经验,共享文件系统 NFS 主要是罪魁祸首。希望对包管理文件处理有更多了解的人会说出来并纠正我,但我认为这与分布在 SGE 集群上的多个分布式 R 进程试图与 LIB_PATH 中的包索引文件交互以及清理延迟有关在 NFS 文件系统上锁定文件。 感谢您的洞察力!由于我的问题是由于无法删除的 NFS 文件,我无法在同一 R 会话中删除 00LOCK 文件夹,因此在安装包时,我会检查将要导入的每个包(以及包本身),将其分离,将其卸下,重新安装,然后重新连接。以这种方式,到目前为止,在安装所有软件包后似乎没有文件夹 00LOCK 保留。这没有使用INSTALL_opts = c('--no-lock') 有趣,我在没有任何 NFS 的 OS X 上遇到了这个问题。但是,您的解决方案奏效了。【参考方案4】:

我在运行 Windows 7 时遇到了类似的问题:

install.packages 中的错误:错误:无法锁定目录“D:\Program Files\R\R-3.6.2\library”进行修改。

我在 R 控制台中使用以下命令解决了这个问题:

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

希望这对 Windows 用户有所帮助...

【讨论】:

【参考方案5】:

当您的最后一个软件包安装异常中断时会发生这种情况。要解决此问题,您应该删除锁定的文件。 例如在 R 控制台中执行这个命令:

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

希望这会有所帮助!

【讨论】:

删除文件也有帮助 有时unlink 不会删除文件夹广告,需要重新启动 R 会话。 为我解决了这个问题。 递归删除整个目录对我有用

以上是关于R install.packages 返回“未能创建锁定目录”的主要内容,如果未能解决你的问题,请参考以下文章

R语言:实现雷达图的绘制

Ubuntu 12.04 R install.packages() 不起作用。没有警告,没有安装

Warning in install.packages : package ‘RGtk2’ is not available for this version of R

Warning in install.packages : package ‘RGtk2’ is not available for this version of R

R中的packages的下载和安装

R,ggplot2,找不到函数“ggplotify”