45

我最近从 R-2.11.1 安装了 R-2.12.0,并通过以下方式更新了所有 CRAN 包:

update.packages(checkBuilt=TRUE, ask=FALSE)

现在我想更新我从 R-forge 安装的所有软件包,但前提是它们在 CRAN 上不可用。换句话说,我不能简单地运行:

update.packages(checkBuilt=TRUE, ask=FALSE, repos="http://r-forge.r-project.org")

因为它会在survivalR-2.12.0 附带的版本上安装包的 R-forge 版本。

我可能可以使用来自old.packages和的信息的某种组合packageStatus来确定哪些包仅存在于 R-forge 上,但我想问在构建自定义解决方案之前是否有更简单的方法。

4

1 回答 1

46

这个怎么样:

# 1. Get the list of packages you have installed, 
#    use priority to exclude base and recommended packages.
#    that may have been distributed with R.
pkgList <- installed.packages(priority='NA')[,'Package']

# 2. Find out which packages are on CRAN and R-Forge.  Because
#    of R-Forge build capacity is currently limiting the number of
#    binaries available, it is queried for source packages only.
CRANpkgs <- available.packages(
  contriburl=contrib.url('http://cran.r-project.org'))[,'Package']
forgePkgs <- available.packages(
  contriburl=contrib.url('http://r-forge.r-project.org', type='source')
)[,'Package']

# 3. Calculate the set of packages which are installed on your machine,
#    not on CRAN but also present on R-Force.
pkgsToUp <- intersect(setdiff(pkgList, CRANpkgs), forgePkgs)

# 4. Update the packages, using oldPkgs to restrict the list considered.
update.packages(checkBuilt=TRUE, ask=FALSE,
  repos="http://r-forge.r-project.org",
  oldPkgs=pkgsToUp)

# 5. Profit?
于 2010-10-19T22:46:15.343 回答