安装旧版本的R包

214

我想使用Rpy2和ggplot2,但是遇到了错误。在网上搜索错误后,我发现这个错误是因为ggplot2包中有一些更改尚未反映在Rpy2中(例如,请参见此帖子(编辑:链接已失效))。

所以我现在需要安装旧版本的ggplot2。以下是我想要的伪代码:

install.packages("ggplot2", version='0.9.1')

但是install.packages没有version参数。我该怎么做?

->

然而,install.packages命令没有version参数,那我该如何安装指定版本的包呢?


尝试使用 checkBuilt 函数?https://dev59.com/1Oo6XIcBkEYKwwoYNBhR - isomorphismes
8个回答

213

安装旧版本的软件包(在R中):

packageurl <- "http://cran.r-project.org/src/contrib/Archive/ggplot2/ggplot2_0.9.1.tar.gz"
install.packages(packageurl, repos=NULL, type="source")

如果这对你不起作用,而且你使用的是Windows系统,原因很可能是缺少适当的工具链来构建/编译软件包。通常情况下,你会从CRAN安装预编译二进制文件,但他们只存档软件包源代码,而不是二进制文件。[1] 这意味着你需要安装Rtools,以便在本地编译所有内容。(注意:Rtools 不是一个R软件包。)
@shadow的答案下面也说明了,你可以使用devtools::install_version()。这也是一个好主意,但在Windows上也需要安装Rtools。
截至2015年9月18日,CRAN上出现了一个新的软件包版本。这依赖于Revolution Analytics MRAN服务器来安装特定版本或日期的软件包:
# install yesterday's version of checkpoint, by date
install.dates('checkpoint', Sys.Date() - 1)

# install earlier versions of checkpoint and devtools
install.versions(c('checkpoint', 'devtools'), c('0.3.3', '1.6.1'))

这样做的好处是在Windows上安装二进制软件包时不需要Rtools,但只适用于2014-09-17以后的版本(MRAN发布日期)。 要从命令行(R之外)安装旧版本: 您还可以通过在命令行(终端、命令提示符等)上使用R CMD INSTALL来安装软件包,一旦您在本地机器上拥有软件包源代码(“tarball”),例如使用wget(如果您有)。
wget http://cran.r-project.org/src/contrib/Archive/ggplot2/ggplot2_0.9.1.tar.gz

如果你使用的是Windows系统,那么相应的PowerShell代码如下:
(new-object System.Net.WebClient).DownloadFile("http://cran.r-project.org/src/contrib/Archive/ggplot2/ggplot2_0.9.1.tar.gz", "./ggplot2_0.9.1.tar.gz")

您可以通过浏览器从CRAN存档中下载源代码。要从本地文件安装,只需执行以下操作:
R CMD INSTALL ggplot2_0.9.1.tar.gz

这应该在任何平台上都能正常工作(前提是需要一个用于构建包的工具链,与上述情况一样)。


[1]这已经不完全正确了。从2016年3月开始,CRAN开始托管"CRAN Archive"服务器,其中包含非常旧的R版本的Windows和Mac二进制文件(> 5年)。您现在可以使用install.packages()直接从此服务器安装。有关详细信息,请参见新的R FAQ 7.44


4
谢谢,我想这应该是正确的方式。可惜我现在得到了以下警告信息:警告信息: 包‘http://cran.r-project.org/src/contrib/Archive/ggplot2/ggplot2_0.9.1.tar.gz’在 R 版本 2.15.2 中不可用。 - hirolau
3
我曾经在使用Rcpp时遇到类似的问题。这可能是由于软件包(DEPENDS:<version>)对R版本的依赖性,或者是当前的R会话不允许您执行更新所导致的。我发现像Mark Butler(下面)建议的那样进行更新可以解决问题(R CMD INSTALL your_version.tar.gz)。在我的情况下,这是针对R 2.15.3进行的更新。 - Robert Casey
@Thomas 感谢您的回复。是的,我正在Windows上,并且已经“伪安装”了Rtools,请参阅此线程 - Antoine
@Thomas 我打算在Amazon EC2上运行我的脚本,以避免在我的机器上出现明显的本地问题(库路径、R版本与包版本之间的差异、编译问题等)。 - Antoine
3
非常遗憾地告诉大家,由于MRAN的退役,这个答案现在必须进行更新。https://techcommunity.microsoft.com/t5/azure-sql-blog/microsoft-r-application-network-retirement/ba-p/3707161 - eric_kernfeld
显示剩余4条评论

152

remotes包提供了一个install_version函数,可以直接完成这个任务。

require(remotes)
install_version("ggplot2", version = "0.9.1", repos = "http://cran.us.r-project.org")

先前,这个答案指向了devtools包,该包也重新导出了install_version函数。感谢@MichaelChirico指出remotes包更可取。


1
你能否在不需要每次加载特定版本时安装版本的情况下,保留同一软件包的多个版本?比如说,"library(ggplot2-0.9.1)"。 - PatrickT
2
@PatrickT 你可以使用本地库来实现这个功能。例如 install_version('ggplot2', version = 0.9.1, lib = 'path_to_library_with_ggplot_0.9.1')library(ggplot2, lib.loc = 'path_to_library_with_ggplot_0.9.1') - shadow
1
在运行install_version之前,您还可以使用.libPaths("/dir_for_custom_library_versions")来设置自定义库版本的目录。 - tjjjohnson

12

纯粹的install.packages方法

请参见r-devel邮件列表上的此线程。Kurt Hornik在回复Kurt Wheeler时,揭示了CRAN网站的一个未记录特性,可以指定软件包的特定版本。

只要您已经安装了所有必需的依赖项,这种方法就可以使用:

package = "https://cran.r-project.org/package=svglite&version=1.2.1"
utils::install.packages(pkgs = package, repos = NULL)

请注意上面的URL结构。这解决了CRAN在最新版本和存档版本的URL结构不同的问题。
# Latest version (not available at Archive/svglite)
https://cran.r-project.org/src/contrib/svglite_1.2.1.tar.gz
# Archived version
https://cran.r-project.org/src/contrib/Archive/svglite/svglite_1.2.0.tar.gz

remotes::install_version 方法

另一个选项是使用 remotes::install_version function。但是,您需要安装 remotes package


线程链接无法使用。 - LMc
1
感谢@LMc的通知。已更新URL为https://stat.ethz.ch/pipermail/r-devel/2018-October/076989.html。 - Daniel Himmelstein

8
您可以从以下链接下载适合您的版本的zip文件。

http://cran.r-project.org/src/contrib/Archive/ggplot2/

在R Studio中: 工具>>安装程序包>>从这里安装:(选择下拉菜单) 软件包存档文件(.zip,.tar.gz)。 选择您新下载的软件包zip文件并安装该软件包。

5

使用install.packages,如另一个答案所述,对我无效。

我发现的最好的替代方法是使用devtools包中的install_url函数。

另一种可能性是我没有进一步探索:

  1. 从软件包存档中下载旧的.tar.gz源文件。
  2. 按照http://rtm.wustl.edu/writings/htrtargz.pdf上记录的步骤在本地安装它。

这对我不起作用,请查看我的问题https://dev59.com/sX7aa4cB1Zd3GeqPlQ5a获取详细信息。 - Tomas
+1,R CMD INSTALL 命令在 Ubuntu 上也可以使用。谢谢! - Phani

5

有一个versions可以极大地简化此任务,适用于2014年9月17日后发布的软件包版本。它使用 Revolution Analytics 的 MRAN 服务器的快照来:

  • 显示任何 CRAN 软件包的发布日期和 MRAN 可用性(available.versions),

  • 安装一个或多个软件包的指定版本(install.versions),或者

  • 安装截至任何指定日期可用的软件包版本(install.dates)。它通过标准的 install.packages 函数从 MRAN 服务器进行安装,因此可以安装可用的二进制版本,而不必从源代码编译,并且可以包括指定日期的软件包依赖项。

当然,不同的软件包版本和 R 版本可能存在兼容性问题。如需运行不同的 R 版本,请参见例如此页面


4

我找到了一个很好的解决方案,对我有效(详细信息请参见链接)。

"repmis"库中的命令:

# Install old versions of the e1071 and gtools packages.

# Create vectors of the package names and versions to install
# Note the names and version numbers must be in the same order
Names <- c("e1071", "gtools")
Vers <- c("1.6", "2.6.1")

# Install old package versions into the default library
InstallOldPackages(pkgs = Names, versions = Vers)

4

另一个选择是使用 {groundhog} 包。它可以通过指定日期来安装 CRAN 上的旧版本软件包。当人们不记得特定的软件包版本,但记得脚本仍然可用的时间时,这尤其有帮助。例如,{ggplot2} 版本 0.9.1 在 2012 年 5 月在 CRAN 上发布,因此我们可以选择 6 月份的日期。

library("groundhog")
groundhog.library("ggplot2", "2012-06-01")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接