2014-07-06 43 views
4

我試圖加載party庫,並得到了以下錯誤:升級包在R:`update.packages`與`install.packages`

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") 
) 

它沒有工作(在同一會話中和重起後無覆蓋UT預壓.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包管理voodoo?謝謝。

回答

7

這是我更喜歡在當前工作R會話之外啓動「安裝」和「更新」操作的另一個原因。

通過使用命令行,我得到沒有加載包的新鮮R會話,並且不會出現您在此遇到的問題。作爲快捷方式,我使用littler(並且包含在該軟件包的examples/目錄中)定義腳本update.rinstall.r,但您當然也可以通過Rscript執行相同的操作。

7

德克提供了一個更通用的策略來避免這個問題。但是,如果您處於不想重新啓動的交互式會話中,並且您想要卸載需要更新的程序包(既不能執行detach(.)-或update.packages(.)-有效實現),也會有一個函數unloadNamespace通常適合我。在其幫助頁面有警告說這不是完全安全的,但我沒有遇到困難。試試:

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