R 3.4.1“单烛”个人库路径错误:无法创建'NA'。

41

我刚刚在我的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不可写”的输出,但通常它会提供这样的解决方案:

Would you like to create a personal library
~/R/x86_64-pc-linux-gnu-library/3.4
to install packages into?  (y/n) y 
任何想法为什么个人库建议NA?有没有办法手动覆盖它?

个人图书馆为什么建议NA?有没有办法手动覆盖?


3
好的,我会尽力进行翻译。以下是需要翻译的内容:See here: http://bugs.debian.org/866768 - Dirk Eddelbuettel
在Ubuntu 16.10上有相同的问题。 - Robert McDonald
1
根据@DirkEddelbuettel的评论,解决方案是使usr/local/lib/R可写,而不是通过取消注释Renviron中的行来恢复个人包库。 - Phil
1
是的。严格来说,两者都可以工作并且是个人偏好;我更喜欢让/usr/local/lib/R/site-library/可写。但是对于非管理员类型来说,恢复用户本地库可能更容易。 - Dirk Eddelbuettel
1
我已经在其他几个地方解释过了。无论如何,R 3.4.1-2包都会恢复旧行为。 - Dirk Eddelbuettel
显示剩余6条评论
6个回答

12

我不知道是什么原因导致了这个问题(我在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’ - 即使我已经将其放在用户库中,并且在运行此命令时已经加载了它。 - jakub
它只是暂时有效,当重新启动系统时,需要再次执行此操作。 - Marcus
此外,如果该目录尚不存在,则必须先创建它。 - Erin LeDell

12

查看 @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,您应该能够将软件包安装到此共享位置。


10
我的解决方案是:这里
在文件/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,现在它可以工作了。

编辑:根据评论,这似乎是预期的行为。这里提供了另一个解决方案。


3

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

sudo apt-get update

2
这需要更多的细节。基本上,发布了 r-base-core 3.4.1-2 版本来修复这个问题。 - sebastian-c

0

在运行一些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())。

这种方法是临时更改,您不必更新任何配置文件。

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

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

没错!你可以在任何地方设置这个环境变量,包括/etc/environment - Dirk Eddelbuettel

0
也许这是R 3.4.1的一个bug,我的解决方案是更改这行代码。
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'}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接