有效地获得旧版本的R包

时间:2013-04-18 19:16:28

标签: r

关于SO的一个反复出现的问题是,对于R版本2.xx.xx,包xx不可用。对于examplegplots包需要用户安装R 3.0才能安装。您可以在存档CRAN中获取旧版本,但是:

  • 要查看特定R版本需要获取哪个版本的软件包并不容易。
  • 您需要从源代码构建软件包,这主要是Windows下的(轻微)挑战。

我的问题如下:是否有更有效的工作流程来获取与旧版R匹配的旧版本?本着为不同版本的ubuntu提供不同的软件包存储库的精神。

我知道一个选项就是获得最新版本的R,但可能有一些迫切的理由坚持使用某个版本的R.例如,有人可能有兴趣重复一个依赖于旧版本的R和支持包。或者一个受到系统管理的限制。

1 个答案:

答案 0 :(得分:4)

这是完全未经测试的(我正在运行最新版本的R并且目前没有时间安装旧版本的R来测试它),但也许一个想法就是从“存档”中获取日期“包的页面,将其与R版本的日期进行比较,并逐步尝试安装早期版本,从最新版本开始。

这样的事情可能是的起点

install_archive <- function(PackageName) {
  if(!require("XML"))
      install.packages("XML")
  if(!require("devtools"))
      install.packages("devtools")
  rVersionDate <- as.Date(paste(R.Version()[c("year", "month", "day")],
                                collapse = "-"))
  BaseURL <- "http://cran.r-project.org/src/contrib/Archive/"
  u <- htmlParse(paste(BaseURL, PackageName, sep = ""))
  doc <- readHTMLTable(u, skip.rows=1:2)[[1]][2:3]
  releaseDate <- as.Date(strptime(doc$`Last modified`, 
                                  format="%d-%b-%Y"))
  Closest <- which.min(rVersionDate - 
                         releaseDate[releaseDate <= rVersionDate])
  install_url(paste(BaseURL, doc$Name[Closest], sep = ""))
} 

install_archive("reshape")

从这里开始,我会在函数中添加以下内容:

  • 我会首先尝试安装最新版本(而不是“存档”),如果失败,请继续。
  • 在前进中,我会将which.min()行更改为rank(),并尝试排名== 1,排名== 2,依此类推,或许设置一个最大等级来尝试。

即使这样,这也是很多“猜测和检查”,只有软件会自动进行猜测和检查。而且,当然,同样的建议认为可能有一个很好的理由不在CRAN上!

相关问题