我尝试加载party库,但得到以下错误:
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因此,我决定更新同一会话(detach all packages while working in R)中的所有包,包括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")
)它不工作(在相同的会话中,并且在没有预加载.RData的情况下重新启动后):
> library(party)
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根据How to update R2jags in R?的说法,最好的方法是在我想要更新的包上运行install.packages,然后重新启动。它确实做到了这一点。
所以这里有一个问题:考虑到正在运行的会话内的更新至少可以说是脆弱的,什么时候调用update.packages,而install.package将以重启会话为代价来完成这项工作?我遗漏了什么R包管理巫术?谢谢。
发布于 2014-07-07 00:24:41
这就是为什么我更喜欢在我当前工作的R会话之外启动“安装”和“更新”操作的另一个原因。
通过使用命令行,我可以在没有加载包的情况下获得新的R会话,并且不会出现您在这里遇到的问题。作为一种快捷方式,我使用littler (包含在该包的examples/目录中)定义脚本update.r和install.r,当然,您也可以通过Rscript执行相同的操作。
发布于 2014-07-07 02:34:07
Dirk提供了一个更一般的策略来避免这个问题。然而,如果你在一个交互会话中,你不想重新启动,并且你想卸载一个需要更新的包( detach(.)-ing或update.packages(.)-ing都不能有效地完成),那么有一个函数unloadNamespace通常对我来说是有效的。在它的帮助页面上有警告,说它不是完全安全的,但我没有遇到困难。尝试:
unloadNamespace("lattice") # or lapply()-ing as you attempted with `detach`
update.packages("lattice")
require(lattice) # or library()https://stackoverflow.com/questions/24597858
复制相似问题