簡體   English   中英

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

[英]updating package in R: `update.packages` vs. `install.packages`

我試圖加載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

所以我決定更新同一個會話中的所有包在R中工作時分離所有包 ),包括lattice ,希望zoo然后partylattice更新后正確加載:

 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

根據如何在R中更新R2jags? 最好只在我想要更新的那些包上運行install.packages ,然后重新啟動。 事實上它確實做到了。

所以這里有一個問題:什么時候調用update.packages ,因為運行會話中的更新至少可以說是脆弱的,而install.package會以重啟會話為代價來完成這個工作? 我失蹤了什么R包管理伏都教? 謝謝。

Dirk提供了一個更一般的策略來避免這個問題。 但是,如果您處於不想重新啟動的交互式會話中,並且您想要卸載需要更新的程序包(既不會detach(.) ing或update.packages(.) ing有效地完成),然后有一個函數, unloadNamespace通常適合我。 其幫助頁面中有警告稱它不完全安全,但我沒有遇到任何困難。 嘗試:

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM