安装旧版本的 R 包

Posted

技术标签:

【中文标题】安装旧版本的 R 包【英文标题】:Installing older version of R package 【发布时间】:2020-02-12 05:08:25 【问题描述】:

我正在尝试使用 Rpy2 和 ggplot2,但出现错误。在网上搜索了一些错误后,发现该错误是因为 ggplot2 包中存在尚未反映在 Rpy2 中的更改(例如,参见this post(编辑:链接现已失效))。

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

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

但是install.packages does not have a version argument。我该怎么做?

【问题讨论】:

试试checkBuilt? ***.com/questions/16503554/… 【参考方案1】:

另一个选项是 groundhog 包。它通过指定日期帮助从 CRAN 安装较旧的软件包版本。当人们不记得特定的包版本,而是脚本仍在工作的时间时,这尤其有用。如果 ggplot2 版本 0.9.1 于 2012 年 5 月在 CRAN 上加载,因此我们可以从 6 月开始。

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

【讨论】:

【参考方案2】:

remotes 包提供了一个可以直接执行此操作的 install_version 函数。

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

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

【讨论】:

您能否保留同一个包的多个版本,而不必每次您希望加载特定版本时都install_version?比如说library(ggplot2-0.9.1) @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') 你也可以在运行 install_version 之前使用 .libPaths("/dir_for_custom_library_versions") 现在我认为remotes::install_version 更可取,因为remotes 是一个比devtools 更轻量级的包(devtools::install_version 只是remotes::install_version 的再导出)【参考方案3】:

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

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

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

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

包版本和 R 版本的组合当然可能存在兼容性问题。要运行不同的 R 版本,请参阅例如 this page。

【讨论】:

【参考方案4】:

install.packages方法

见this thread on the r-devel mailing list。在回复 Kurt Wheeler 时,Kurt Hornik 揭示了 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_versionfunction。但是,您需要安装 remotes package。

【讨论】:

【参考方案5】:

找到了一个很好的解决方案,它对我有用(详细信息在link)。

“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)

【讨论】:

【参考方案6】:

从源代码(在 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,则原因可能是 the lack of an appropriate tool chain for building/compiling packages。通常你会从 CRAN 安装一个预编译的二进制文件,但它们只归档包 sources,而不是二进制文件。[1] 这意味着你需要安装 Rtools 以便你可以在本地编译所有内容。 (注:Rtools is not an R package。)

@shadow 的回答below 也说明您可以使用devtools::install_version()。这也是一个好主意,但也需要在 Windows 上使用 Rtools。

截至 2015 年 9 月 18 日,a new package versions has appeared on 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'))

这样做的好处是不需要 Rtools 在 Windows 上安装二进制包,但只能追溯到 2014-09-17(MRAN 启动时)。

从命令行(R 之外)安装旧版本:

您也可以在您的机器上本地拥有包源(“tarball”)后,在命令行(终端、命令提示符等)上使用R CMD INSTALL 来安装包,例如使用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 开始托管 a "CRAN Archive" server,其中包含适用于非常旧版本的 R(> 5 岁)的 Windows 和 Mac 二进制文件。您现在可以使用install.packages() 直接从该服务器安装。有关详细信息,请参阅新的R FAQ 7.44。

【讨论】:

谢谢,我想这是正确的方法。太糟糕了,我现在得到:Warning message: package ‘http://cran.r-project.org/src/contrib/Archive/ggplot2/ggplot2_0.9.1.tar.gz’ is not available (for R version 2.15.2) Rcpp 也有类似的问题。这可能是由于包的 R 版本依赖性(DEPENDS: ),或者可能是正在运行的 R 会话不允许您执行更新。我发现对我有用的是按照 Mark Butler(下)建议的方式进行更新(R CMD INSTALL your_version.tar.gz)。就我而言,这是针对 R 2.15.3 的。 @Antoine 你在 Windows 上吗?如果是这样,您是否安装了 Rtools? @Thomas 感谢您的回复。是的,我在 Windows 上安装了 Rtools “伪安装”,请参阅 thread。 @Thomas 我将尝试在 Amazon EC2 上运行我的脚本,以避免我的机器上出现明显的本地问题(库路径、R 版本与包版本、编译问题等)跨度> 【参考方案7】:

您可以从下面的链接以 zip 文件的形式下载相应版本。

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

在 R Studio 中: 工具>>安装包>>安装自:(选择下拉)

包存档文件(.zip、.tar.gz)。

选择你新下载的包压缩文件并安装包

【讨论】:

【参考方案8】:

如另一个答案中所述使用install.packages 对我不起作用。

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

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

    从包档案中下载旧的 .tar.gz 源文件。 按照http://rtm.wustl.edu/writings/htrtargz.pdf 中记录的步骤进行本地安装。

【讨论】:

这对我不起作用,请关注我的问题***.com/q/22673474/684229 了解详情。 +1,R CMD INSTALL 命令也适用于 Ubuntu。谢谢!!

以上是关于安装旧版本的 R 包的主要内容,如果未能解决你的问题,请参考以下文章

R语言安装指定的旧版本的R包实战:通过文件的源链接remotes包通过RStudio

R语言安装.tar.gz包

升级 R 版本后,如何轻松重新安装旧版本中安装的所有软件包? [复制]

安卓软件升级软件如何覆盖旧版

如何在离线 Debian 机器上安装 R 包?

Linux中docker容器的安装