更新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()