繁体   English   中英

某些 R 包不会使用 update.packages() 进行更新

[英]Some R packages do not update with update.packages()

选择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。

问题的一般重述

  1. 在 Windows 7/8 中,包含在基本安装中的包nicePack已过时。
  2. 您可以使用update.packages()或通过等效的 GUI 菜单更新它。
  3. 你得到:
    Warning: package 'nicePack' in library 'C:/Program Files/R/R-3.*.*/library" will not be updated

潜在原因

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

如果您查看 R 能够写入的个人包目录,您会看到nicePack的更新版本在那里。 在 Windows 中,目录通常是~\\R\\win-library\\xy或使用Sys.getenv("R_LIBS_USER")找到它。

大概是第一次用R,无法写入R默认目录,使用了个人目录,所以nicePack有两个版本。 第二次,尽管有 admin 权限,R 在个人目录中找到更新的包版本并且它没有更新默认目录。

可能的是,R表示“警告”,而不是“错误”,因为该软件包安装在个人目录,而是一个过时的版本保留在默认库。

解决方案

删除个人库目录下的nicePack包目录,以管理员身份重启,再次更新。

意见

我不知道这种行为是否存在实际错误,无论如何,提供更多信息的消息肯定会帮助 Windows 用户。

也许在 Windows 中应该避免使用默认库,而应该使用个人库。 许多 Windows 应用程序使用C:\\ProgramData~\\AppData\\Local ,无需特殊权限即可写入。

我在 Ubuntu 上,我在 RStudio 上遇到了同样的问题。 我试图通过sudo Rupdate.packages() 但它没有帮助。 然而sudo rstudio + update.packages()已经解决了这个问题。

就我而言,在 Ubuntu 的终端中使用了以下命令序列:

sudo i-
R
update.packages(ask=FALSE)
q(save="no")
logout

也就是说:以root身份登录->启动R->从root更新包->退出R->退出root。

在 R 4.0.4 (Gallium OS 3.1) 上

权限? old.packages() ?

就我而言,我注意到 3 个不会更新的包的权限设置与/usr/local/lib/R/library其他包不同。

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

然后我运行old.packages()并注意到 SAME 3 个包被认为是old

我承认我不太明白 ?update.packages() 中的帮助,但尝试了以下方法。

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

这解决了问题并更新了 3 个软件包。

我在 Windows 上,但通过 SSH 隧道(AWS / Ubunutu Linux)使用 R Studio Server。 我认为有时 R Studio 会增加一层困难而不是让事情变得更容易,这发生在多个 UNIX 用户的包依赖关系中

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

您可以在您的用户和其他版本上有一个包版本

您需要使用 root 用户通过SUDO R (与 Windows 上的 R.exe 相同) su root和 install.update()。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM