有些 R 包在使用 update.packages() 命令更新时无法更新。

27

选择 Packages->Update packages... 后得到:

> update.packages(ask='graphics',checkBuilt=TRUE)
--- Please select a CRAN mirror for use in this session ---
Warning: package 'foreign' in library 'C:/Program Files/R/R-3.0.2/library' will not be updated
Warning: package 'lattice' in library 'C:/Program Files/R/R-3.0.2/library' will not be updated
Warning: package 'Matrix' in library 'C:/Program Files/R/R-3.0.2/library' will not be updated
Warning: package 'mgcv' in library 'C:/Program Files/R/R-3.0.2/library' will not be updated
Warning: package 'nlme' in library 'C:/Program Files/R/R-3.0.2/library' will not be updated
Warning: package 'rpart' in library 'C:/Program Files/R/R-3.0.2/library' will not be updated

我在启动菜单中以“管理员”身份运行了R快捷方式,结果相同。

R版本为3.0.2。


6
也许你是以管理员身份安装这些程序,现在以普通用户身份运行它们了? - Dirk Eddelbuettel
1
一如既往的鼓励,使用个人库可以解决这些小问题。 - im so confused
6
请注意,所提到的软件包通常是基础安装中的。因此仅拥有个人库并不能解决这个问题。 - Dason
@Dason 谢谢!我会记住的 - 别人帮我解决了同样的问题,使用个人库/以管理员身份运行修复了它,我匆忙地应用了同样的建议!哈哈 - im so confused
@imsoconfused:无论如何,我已经激活了个人库。 libPaths() 的输出符合预期: [1] "C:/Users/antonio/R/win-library/3.0" "C:/Program Files/R/R-3.0.2/library" - antonio
可能有什么东西正在使用这些包吗? - im so confused
5个回答

26

问题的概括

  1. 在Windows 7/8中,基础安装包中包含的 nicePack 已经过时。
  2. 您可以通过 update.packages() 或等效的GUI菜单将其更新。
  3. 但您会收到以下信息:
    警告:无法更新库'C:/Program Files/R/R-3.*.*/library' 中的软件包'nicePack'

可能的原因

R对Windows不太友好,因此它只说“将不会被更新”,而不是像“权限被拒绝到C:/Program Files/R/…”这样的消息。无论如何,您意识到R无法写入 C:/Program Files,因此以管理员身份重启并升级,但问题仍然存在!

如果您检查个人目录,R可以写入其中,您会发现更新的版本nicePack已经在那里了。在Windows中,该目录通常为 ~\R\win-library\x.y,或使用Sys.getenv("R_LIBS_USER") 来找到它。

可能第一次,由于无法写入R默认目录,R使用了个人目录,因此有两个版本的nicePack。第二次,尽管具有管理员权限,但R在个人目录中找到了更新的软件包版本,因此不会更新默认目录。

也许R之所以说“警告”而不是“错误”,是因为该软件包已安装在个人目录中,但默认库中仍存在一个过时的版本。

解决方法

在个人库目录中删除nicePack软件包目录,以管理员身份重新启动并再次更新即可。

意见

我不知道这种行为是否存在实际缺陷,但更详细的消息肯定会帮助Windows用户。

也许在Windows中应该避免使用默认库,而选择个人库。许多 Windows 应用程序使用 C:\ProgramData~\AppData\Local,这些位置可在没有特殊权限的情况下进行写入。


我会说有个bug。 nicePack 的第一个升级(在仅存储在C:/Program Files/R/R-4.0.2/library中的某个时间点)工作正常:'lib = "C:/Program Files/R/R-4.0.2/library"' 不可写。您想使用个人库吗?然而,随后的更新被忽略了。 - bers
在没有管理员权限的机构设备上,应该怎么做才能解决这种情况? - canderson156

8

在 R 4.0.4 (Gallium OS 3.1) 上

权限问题?old.packages()?

在我的情况下,我注意到有三个软件包无法更新,其权限与 /usr/local/lib/R/library 中其他软件包不同。

我修复了这些权限,但问题并没有得到解决。

然后我运行了 old.packages() 并发现相同的三个软件包被认为是 old

我承认我并没有完全理解 ?update.packages() 中的帮助内容,但尝试了如下操作。

update.packages(oldPkgs = old.packages())

这解决了问题,三个软件包得到了更新。


2
非常感谢!这在我的Ubuntu 20.04.3上的R 3.6.3上有效。在运行update.packages(old...)之前,我也不需要更改权限。 - Max Robinson
这个问题是关于Windows文件权限的。 - IRTFM

6

我使用Ubuntu系统,在RStudio中遇到了同样的问题。我尝试通过sudo Rupdate.packages()来解决,但是没有成功。 然而,使用sudo rstudio+update.packages()解决了这个问题。


在我的 Arch 机器上也可以工作,只是在我的情况下可执行文件被称为 rstudio-bin,因为我安装了更上游的“rstutio-desktop-bin”软件包,而不是“rstudio-desktop”。 - Waldir Leoncio

2
在我的情况下,在Ubuntu终端中运行以下命令序列:
sudo i-
R
update.packages(ask=FALSE)
q(save="no")
logout

也就是说:以root用户登录 -> 启动R -> 从root更新软件包 -> 退出R -> 退出root。

0

我在Windows上,但是通过SSH隧道(AWS / Ubuntu Linux)使用R Studio Server。我认为有时候R Studio会增加一些困难层面,而不是让事情变得更容易,这种情况发生在跨多个UNIX用户的软件包依赖性方面。

因此,添加可能影响寻找上述问题答案的人的可能场景 >>>

您可以在您的用户上拥有一个软件包版本,而在其他版本上则不同。

您需要su root并通过SUDO R(与Windows上的R.exe相同)使用root用户进行安装更新。

然后,当您访问RStudio Server时,您将看到系统库包已更新

总之,即使您在服务器上只使用一个高特权unix用户,也会有两个不同的库位置:

ubuntu(用户):/usr/local/lib/R/

系统范围:/usr/lib/R/library


这对我来说是解决方案(请参见下一个答案) - Miguel Alvarez

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