【问题标题】:Efficiently getting older versions of R packages有效地获取旧版本的 R 包
【发布时间】:2013-04-12 01:27:38
【问题描述】:

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

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

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

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

【问题讨论】:

  • 那会很有趣。我正在阅读一本关于 R 机器学习的书,由于我的 R 和包版本更新,我已经浪费了很多时间。书中给出的一些命令不适用于更新的软件包版本。 “获得特定版本的 R 和软件包”会很好
  • 作者最好能展示 R 的版本以及在任何分析中直接或间接使用的所有包的版本,以允许其被复制。
  • 是的,请一位同事为您完成所有工作。 :)
  • 您可以使用devtools 中的install_version,或对其进行一些修改

标签: r


【解决方案1】:

这完全未经测试(我正在运行最新版本的 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(),并尝试rank == 1、rank == 2 等等,也许设置一个最大的尝试排名。

即便如此,这是很多“猜测和检查”,只有软件会自动为您进行猜测和检查。而且,当然,同样的建议认为它不在 CRAN 上可能有充分的理由!

【讨论】:

  • +1!我同意没有向后支持,例如Ubuntu 对于较旧的发行版,很难有一种有效且强大的方法来运行旧版本的 R。
猜你喜欢
  • 1970-01-01
  • 2013-06-09
  • 1970-01-01
  • 2016-01-14
  • 2022-12-06
  • 2015-04-30
  • 2016-03-02
  • 2021-09-11
相关资源
最近更新 更多