图书馆不可写

88

我在Ubuntu机器上使用R版本3.0.2(2013-09-25)进行软件包安装时遇到了问题:

install.packages("randomForest")
Installing package into ‘/usr/local/lib/R/site-library’
(as ‘lib’ is unspecified)
Warning in install.packages :
  'lib = "/usr/local/lib/R/site-library"' is not writable
如何解决?

4
如果您正在使用终端,请只需执行 sudo R 命令。不过我无法确定这是否是一段要执行的脚本。 - bb8
不要仅仅使用sudo命令。这会导致读写权限的各种问题。 - emilBeBri
14个回答

69

对于R版本3.2.2(2015-08-14),此问题应该得到解决,因为R在安装过程中建议使用不同的路径来存储您的R库。 安装过程如下所示: (这里以“random”作为示例软件包)

install.packages('random')

Installing package into ‘/usr/local/lib/R/site-library’
(as ‘lib’ is unspecified)
Warning in install.packages("random") :
'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
~/R/pc-linux-gnu-library/3.2
to install packages into?  (y/n) y

因此,在安装过程中,回答两个问题都用“y”应该可以正确安装包。

更新18/01/19

如果您不想将 R 包存储在额外的文件中:

正如Antoine-SacRobert TheSim所指出的那样,您可以将自己添加到 staff 组中,以便能够写入 'site-library'。(单击名称以查看其重要补充)

在此更新之前,我在此评论中提到了使用 'chmod o+w' 更改 'site-library' 文件夹权限的选项,以便能够写入它。假设存在安全问题但无法确定,我对此发出了警告,但主要是在等待有人解决此问题。Antoine-Sac 和 Robert TheSim 在此期间已经解决了该问题。谢谢!


2
你提到了“可能的缺陷”。有哪些可能的缺陷?如果我这样做,会不会意外破坏我的R安装? - Nathan majicvr.com
1
回答两个问题都是“是”的话,有什么不利之处吗? - Stephen
更改权限搞砸了我的安装!这还不够,我不得不按照这里的说明进行完全重新安装。 - agent18
抱歉,直到现在我才注意到你的评论。@Stephen:据我所知,用“yes”回答两个问题不会造成任何问题。个人库将自动创建。frank:更改文件夹“site-library”的权限没有在我的机器上引起问题。不幸的是,我无法为其他系统发表评论,正如Thej Kiran提到可能会出现问题。因此,确定的方法是自动创建库。 - manuel_va
3
不要那样做!设置 o+w 允许任何其他用户(也就是任何正在运行的进程)写入 site-library,这是一个安全问题。site-library 目录属于 staff 组。只需将自己添加到 staff 组(在 Debian 及相关系统中使用 sudo adduser <username> staff 命令,更通用的命令请参见下面的答案),然后您就可以写入它了,根本无需更改权限。 - asachet

28

如果你使用的是Windows系统,可以将R(或RStudio)以管理员身份运行。

关闭R后,找到R或RStudio图标,右键点击并选择“以管理员身份打开”。这样可以完美解决安装软件包时出现的所有错误信息。


谢谢。你的回答帮了我,因为你提到了提升为管理员。我只是以管理员权限重新启动了命令编辑器,然后一切都很顺利。顺便说一下,我使用的是Windows机器,不是Linux。我不知道在Linux上是否也可以这样做。 - Abdulkarim Kanaan
在Linux中以特权运行程序非常容易,而且经常使用。要以root权限打开RStudio,请在终端中键入“sudo rstudio”命令。 - BanAnanas
您,先生,是一个传奇。 - Sidders
你配得上每一个可能的赞,伙计! - Farid Huseynov

25

将自己添加到名为“staff”的群组中

sudo usermod -a -G staff your_user_name

用您的登录用户名替换your_user_name,然后注销并重新登录。

请勿使用chmod 777,这是一种安全漏洞,而且完全没有意义!


1
是的,这个完美地运作 - 只需要登录和退出rstudio。感谢指出site-library属于staff! - asachet
1
whoami 命令是否提供了你正在使用的 your_user_name 变量? - Kots
那个文件夹的所有者是root,而不是staff。 - giammi56
潜在的愚蠢问题:在哪里输入 sudo usermod -a -G staff …?命令提示符?R 终端?R 控制台?其他地方? - Jade131621
@Jade131621 在终端中,这是一个 Linux Bash 命令。 - Mostafa90
显示剩余3条评论

22

对于那些试图使用install.packages()同时安装多个包的人:

install.packages("vcd","vcdExtra","plyr")

并且收到了类似的警告:

Warning in install.packages :
  'lib = "vcdExtra"' is not writable
Would you like to use a personal library instead? (yes/No/cancel) cancel
Error in install.packages : unable to install packages

你应该将包名放入向量中:

install.packages(c("vcd","vcdExtra","plyr"))

install.packages() 的第二个参数是 lib


3
我遇到了相同的问题,直到意识到应该用c()将软件包名称括起来。因此,install.packages(c("vcd","vcdExtra","plyr")) 应该可以解决这个问题。 - Nikolay Nenov
2
install.packages("vcd","vcdExtra","plyr") should've been install.packages(c("vcd","vcdExtra","plyr")), the second parameter in the install.packages is lib - Ash
这在我的Windows 10上,R 4.0.5上运行良好。 - Claudio Paladini
这是一次安装多个软件包的预期方式,因此我相信它应该可以在任何操作系统和版本上正常工作 :) - BanAnanas
嗨,Colin。因为这些警告非常相似,许多人在寻找解决该问题的方法时都能找到这个问题。我认为,如果我发布了我当时解决问题的解决方案,不会对任何人造成伤害。如果你愿意,你可以发布一个具体的问题,并回答我的答案,那里将会给你信用 :) - BanAnanas
显示剩余3条评论

22

问题在于默认安装位置是一个您没有写入权限的地方。

解决方案是使用一个您拥有写入权限的安装位置。

具体地说,我建议使用以下命令在不需要特殊权限的位置创建个人库文件夹,下一次启动R时会自动检测到:

dir.create(Sys.getenv("R_LIBS_USER"), recursive = TRUE)  # create personal library
.libPaths(Sys.getenv("R_LIBS_USER"))  # add to the path

install.packages("randomForest")  # install like always
library(randomForest)  # use library like always

调用dir.create的建议遵循了此FAQ,创建一个按照Sys.getenv("R_LIBS_USER")命名的文件夹。这是个好选择,因为在下次启动R时可以找到它,这样您就可以使用install.packageslibrary而无需指定特定的位置。调用.libPaths函数让我们避免重新启动R,在库路径中立即添加新文件夹。前两行仅在未创建个人库时需要,但重复运行它们不会造成任何损害。之后,安装包和使用库可以像往常一样进行。


我在Linux中遇到了同样的问题,这就是解决它的答案。谢谢! - Francisco

6

谢谢您先生..!我还有一个问题不太清楚.. 我在安装Rstudio中的rgl包时遇到了错误。 install.packages("rgl") 我得到了以下错误信息:Package LibPath Version Priority Depends Imports LinkingTo Suggests Enhances License License_is_FOSS License_restricts_use OS_type Archs MD5sum NeedsCompilation Built. - Priya
1
第三个选项(见下文):将自己添加到“staff”组中,这将使您有权限在该文件夹中写入。 - asachet

2
如果您正在使用Windows 10操作系统,则可能启用了勒索软件保护。您需要将其禁用。
我曾经遇到过同样的问题,我有写入访问权限,但突然间它停止了。我无法安装软件包。禁用勒索软件保护对我有用。
"最初的回答"

1
"“XX”不可写"的错误也可能意味着您提供的库路径不存在。"

0

也许可以尝试使用sudo chmod +777 #nameoflib
这对我有用


0

我注意到如果RStudio被沙盒化,它会给出“不可写”的警告。


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