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

时间:2014-07-06 16:18:58

标签: r

我尝试加载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包裹管理伏都教的一点点?感谢。

2 个答案:

答案 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.rinstall.r(并包含在该软件包的examples/目录中)但您当然可以通过Rscript执行相同的操作