R 3.4.1 “Single Candle”个人库路径错误:无法创建“NA”

Posted

技术标签:

【中文标题】R 3.4.1 “Single Candle”个人库路径错误:无法创建“NA”【英文标题】:R 3.4.1 "Single Candle" Personal Library Path Error: unable to create ‘NA’ 【发布时间】:2017-12-05 07:54:00 【问题描述】:

我刚刚在我的 Linux Mint 18.1 Cinnamon 机器上更新到 R(3.4.1“Single Candle”)并尝试安装一个包。 R 返回以下内容:

> install.packages('ggplot2')
Installing package into ‘/usr/local/lib/R/site-library’
(as ‘lib’ is unspecified)
Warning in install.packages("ggplot2") :
  'lib = "/usr/local/lib/R/site-library"' is not writable
Would you like to use a personal library instead?  (y/n) y
Would you like to create a personal library
NA
to install packages into?  (y/n) y
Error in install.packages("ggplot2") : unable to create ‘NA’

我之前遇到过“lib not writable”输出,但通常它提供了这样的解决方案:

Would you like to create a personal library
~/R/x86_64-pc-linux-gnu-library/3.4
to install packages into?  (y/n) y 

任何想法为什么个人图书馆建议不适用?有没有办法手动覆盖它?

【问题讨论】:

见这里:bugs.debian.org/866768 在 Ubuntu 16.10 上出现同样的问题。 根据@DirkEddelbuettel 的评论,解决方案是使usr/local/lib/R 可写,通过取消注释Renviron 中的行来恢复个人包库。 是的。严格来说既工作又是个人喜好;我喜欢让/usr/local/lib/R/site-library/ 可写得更好。但是对于非管理员类型来说,恢复用户本地库可能更容易。 我已经在其他几个地方解释过了。在任何情况下,R 3.4.1-2 包都会恢复到旧的行为。 【参考方案1】:

2017 年 7 月 8 日之后,这将解决所有问题

sudo apt-get update

【讨论】:

这需要更多细节。基本上,r-base-core 3.4.1-2 的发布解决了这个问题。【参考方案2】:

可能这是 R 3.4.1 的一个错误,我的解决方案是更改

R_LIBS_SITE=$R_LIBS_SITE-'/usr/local/lib/R/site-library:/usr/lib/R/site-library:/usr/lib/R/library' 

/etc/R/Renviron文件中放入

R_LIBS_SITE=$R_LIBS_SITE-'~/R/x86_64-pc-linux-gnu-library/3.4.1:/usr/local/lib/R/site-library:/usr/lib/R/site-library:/usr/lib/R/library'

【讨论】:

【参考方案3】:

My solution 如下:

/usr/lib/R/etc/Renviron文件中有一个R的配置

在第 43-45 行有:

# edd Jun 2017  Comment-out R_LIBS_USER
#R_LIBS_USER=$R_LIBS_USER-'~/R/x86_64-pc-linux-gnu-library/3.4'
##R_LIBS_USER=$R_LIBS_USER-'~/Library/R/3.4/library'

我取消了 R_LIBS_USER=$R_LIBS_USER-'~/R/x86_64-pc-linux-gnu-library/3.4' 的注释,重新启动了 RStudio,现在它可以工作了。

编辑:看看 cmets,这似乎是一种有计划的行为。 Here 是另一种解决方案。

【讨论】:

【参考方案4】:

查看@Dirk 的评论 (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=866768) 中的详细信息,这是一种计划行为,以便为系统的所有用户安装一次软件包。

解决方案是让/usr/local/lib/R/ 对所有用户都可写,而不是恢复为每个用户提供个人包库的旧行为。

打开一个终端并:

使用cd /usr/local/lib/ 导航到/usr/local/lib/ 更改所有者:组,以便所有用户都可以写入该文件夹。我碰巧在我的计算机上有一个所有用户都是成员的组,所以我使用了它,但如果需要,请参阅https://askubuntu.com/questions/66718/how-to-manage-users-and-groups 以获取有关设置组的帮助 要更改所有权,请使用sudo chown owner:group -R R/owner 是任何用户,这并不重要。 group 是关键;确保任何想在您的系统上使用 R 的人都是该组的成员。 -R 是递归的(即对 R/ 中的所有文件和文件夹进行递归)。 如果您需要更改组权限,请使用chmod -R 775 R/。这将授予所有者和组读取、写入和执行权限,并授予所有其他人读取和执行权限。

现在重新启动 R,您应该可以将软件包安装到您的共享位置。

【讨论】:

【参考方案5】:

在运行某些 Bioconductor 软件包的安装过程时,我也遇到了同样的情况。

然后我意识到我也可以在 bash 命令行上写这个(或类似的):

export R_LIBS_USER=$HOME/R/x86_64-pc-linux-gnu-library/3.4 && R

export R_LIBS_USER=$HOME/R/x86_64-pc-linux-gnu-library/3.4 && rstudio

然后在 R 中运行upgrade.packages()(或install.packages(),或biocLite())。

这样更改是临时的,您不必更新任何配置文件。

如果随后 .Renvironor.Rprofile` 中的命令在 R 启动期间将 R_USER_LIBS 设置为不同的位置(-检查您的配置),则此 shell 命令将无用。

坚持使用 $HOME/R/x86_64-pc-linux-gnu-library/3.X 可能是可取的 如果你已经在这个位置有很多包,你希望它们在那里升级/安装。 我有很多 Bioconductor 包,我不想让它们再次下载,其中一些包在使用时会下载巨大的“Omics”数据集。 可能 /usr/local/lib/R 所在的分区磁盘空间太小或驱动器速度较慢。

【讨论】:

正确!你可以设置这个环境变量任何地方你喜欢,包括/etc/environment【参考方案6】:

我不知道是什么导致了这个问题(我也在 Ubuntu 16.04 上遇到过),但这里有一个快速的解决方法:

.libPaths(c("/home/your_username/R/x86_64-pc-linux-gnu-library/3.4/", .libPaths()))

当然,您可以将"/home/your_username/..." 替换为任何其他目录(将存储您的个人库)。

此解决方案使install.packages()library() 工作。等待全面修复!

编辑:我应该注意这个解决方案不是持久的。也就是说,重新启动 R 后它不会持续。您可以通过将上述相同的代码行添加到 /home/your_username/.Rprofile 文件来解决此问题。

【讨论】:

这让我可以安装包,甚至加载它们并以交互方式使用它们,但是当我尝试构建一些东西时,它会喊:Error in loadNamespace(name) : there is no package called ‘devtools’ - 即使我在用户库中有它,它是在运行此命令时加载。 它是临时工作的,当重新启动系统时,需要再次这样做。 另外,如果该目录尚不存在,您必须先创建它。

以上是关于R 3.4.1 “Single Candle”个人库路径错误:无法创建“NA”的主要内容,如果未能解决你的问题,请参考以下文章

R 3.4.1 - RSiteCatalyst 排队报告智能使用 while 循环

r语言如何求矩阵中某一列的总和

R中反向下三角矩阵的树列表

在 R 中处理个人功能的最佳实践

(个人)CentOS的JDK安装

uva11181Probability|Given