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

我最近从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") 

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

我大概可以使用old.packagespackageStatus一些信息组合来确定哪些软件包只存在于R- packageStatus上,但是我想在构build自定义解决scheme之前询问是否有更简单的方法。

这个怎么样:

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