代码之家  ›  专栏  ›  技术社区  ›  Joshua Ulrich

自动更新从R-forge安装的软件包

  •  45
  • Joshua Ulrich  · 技术社区  · 14 年前

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

    现在我想更新我从R-forge安装的所有软件包,但是 只有在CRAN上没有 . 换句话说,我不能简单地运行:

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

    因为它会安装 survival 包覆盖R-2.12.0附带的版本。

    我可能需要一些来自 old.packages packageStatus 要确定哪些包只存在于R-forge上,但我想问在构建自定义解决方案之前是否有更简单的方法。

    1 回复  |  直到 10 年前
        1
  •  46
  •   Joshua Ulrich    11 年前

    这个怎么样:

    # 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?