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

use*_*469 4 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
Run Code Online (Sandbox Code Playgroud)

所以我决定更新同一个会话中的所有包(在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")
 )
Run Code Online (Sandbox Code Playgroud)

它不起作用(在同一个会话中并且在没有预加载的情况下重新启动之后.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
Run Code Online (Sandbox Code Playgroud)

根据如何在R中更新R2jags?最好只运行install.packages我想要更新的那些软件包,然后重新启动.事实上它确实做到了.

所以这里有一个问题:什么时候被update.packages调用,因为运行会话中的更新至少可以说是脆弱的,并且install.package会以重启会话为代价来完成这个工作?什么位的R我缺少的包管理巫术?谢谢.

42-*_*42- 9

Dirk提供了一个更一般的策略来避免这个问题.但是,如果您处于一个您不想重新启动的交互式会话中,并且您想要卸载需要更新的程序包(detach(.)-ing或update.packages(.)-ing 无法有效地完成),那么有一个函数,unloadNamespace通常适用于我.其帮助页面中有警告称它不完全安全,但我没有遇到任何困难.尝试:

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


Dir*_*tel 6

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

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