更新R:`update.packages`vs.`install.packages中的包`

更新R:`update.packages`vs.`install.packages中的包`,r,R,我试图加载参与方库,但出现以下错误: Loading required package: zoo Error in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]) : namespace ‘lattice’ 0.20-24 is already loaded, but >= 0.20.27 is required Error: package ‘zoo’ could not be loaded

我试图加载
参与方
库,但出现以下错误:

 Loading required package: zoo
 Error in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]) : 
   namespace ‘lattice’ 0.20-24 is already loaded, but >= 0.20.27 is required
 Error: package ‘zoo’ could not be loaded
因此我决定更新同一会话()中的所有包,包括
lattice
,希望
zoo
party
lattice
更新后能够正确加载:

 pkgs <- names( sessionInfo()$otherPkgs )
 pkgs <- paste('package:', pkgs, sep = "")
 lapply( pkgs , detach, character.only = TRUE, unload = TRUE)
 update.packages(checkBuilt=TRUE, ask=FALSE,
                 repos="http://r-forge.r-project.org",
                 oldPkgs=c("lattice","zoo","party")
 )
根据我的建议,最好在我想要更新的软件包上运行
install.packages
,然后重新启动。事实上,它成功了


所以问题是:
update.packages
什么时候需要,因为在运行的会话中进行更新至少是脆弱的,而
install.packages
将以重新启动会话为代价来实现这一点?我错过了什么
R
包管理巫术?谢谢。

这是我喜欢在当前工作会话之外启动“安装”和“更新”操作的另一个原因


通过使用命令行,我可以在没有加载包的情况下获得新的R会话,并且不会出现您在这里遇到的问题。作为一种快捷方式,我定义脚本
update.r
install.r
使用(并包含在该软件包的
examples/
目录中),但您当然可以通过Rscript执行相同的操作。

Dirk提供了一种更通用的策略来避免此问题。但是,如果您处于一个不想重新启动的交互式会话中,并且希望卸载一个需要更新的包(这既不是
分离(.)
-ing,也不是
更新.packages(.)
-ing有效地完成),那么有一个函数,
unloadNamespace
通常对我有效。在它的帮助页面上有警告说它不完全安全,但我没有遇到任何困难。尝试:

unloadNamespace("lattice")   # or lapply()-ing as you attempted with `detach`
update.packages("lattice")
require(lattice)  # or library()
unloadNamespace("lattice")   # or lapply()-ing as you attempted with `detach`
update.packages("lattice")
require(lattice)  # or library()