我尝试加载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
1}}已更新:
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
包裹管理伏都教的一点点?感谢。
答案 0 :(得分:9)
Dirk提供了一个更一般的策略来避免这个问题。但是,如果您处于不想重新启动的交互式会话中,并且想要卸载需要更新的程序包(detach(.)
- 或update.packages(.)
- 无法有效完成),然后有一个函数,unloadNamespace
通常适合我。其帮助页面中有警告称它不完全安全,但我没有遇到任何困难。尝试:
unloadNamespace("lattice") # or lapply()-ing as you attempted with `detach`
update.packages("lattice")
require(lattice) # or library()
答案 1 :(得分:6)
这是我更喜欢在当前正在运行的R会话之外启动“安装”和“更新”操作的另一个原因。
通过使用命令行,我获得了没有加载包的新R会话,并且不会出现您在此遇到的问题。作为一种捷径,我使用littler定义脚本update.r
和install.r
(并包含在该软件包的examples/
目录中)但您当然可以通过Rscript执行相同的操作