这完全未经测试(我正在运行最新版本的 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 上可能有充分的理由!