如何确定哪个旧版本的 R 包与我的 R 版本兼容

Posted

技术标签:

【中文标题】如何确定哪个旧版本的 R 包与我的 R 版本兼容【英文标题】:How to determine which older version of the R package is compatible with my R version 【发布时间】:2015-04-30 06:35:15 【问题描述】:

我正在尝试安装“tm”包,但随后我收到一条错误消息,提示“tm”不适用于我的 R 版本

package ‘tm’ is not available (for R version 3.0.2)

但后来我看到有人建议我从

下载存档版本
http://cran.r-project.org/src/contrib/Archive/tm/?C=M;O=A

然后尝试从源安装。

我的问题是如何确定列表中的哪个文件与我的 R 版本兼容?

【问题讨论】:

每个包都有一个说明文件,应该列出它的要求。我建议查看档案中 2014 年初或 2013 年中期的版本。 相关:***.com/questions/16091304/… 【参考方案1】:

我开发了一个与 here 方法相关的答案,但它仅使用基数 R(您不需要 XMLdevtools 或任何东西)。它还可能处理我从另一个问题链接到的解决方案可能无法解决的一些突发事件。由于它大约有 100 行代码,而不仅仅是在这里发布一个巨大的函数,我将它打包成一个包 oldr 你可以从 GitHub 获得:

oldr package GitHub repo

该包只有一个导出函数,install.compatible.packages()。我已经在 Ubuntu 18.04 上对其进行了测试。我安装了 R 3.1.0 并安装了tm(及其依赖项)。 tm 的当前版本需要 R 3.2.0,因此无法通过 install.packages() 获得,但我的函数允许安装它:

> oldr::install.compatible.packages("NLP")
Installing package into ‘/home/duckmayr/R/x86_64-unknown-linux-gnu-library/3.1’
(as ‘lib’ is unspecified)
* installing *source* package ‘NLP’ ...
** package ‘NLP’ successfully unpacked and MD5 sums checked
** R
** inst
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (NLP)
> oldr::install.compatible.packages("slam")
Installing package into ‘/home/duckmayr/R/x86_64-unknown-linux-gnu-library/3.1’
(as ‘lib’ is unspecified)
* installing *source* package ‘slam’ ...
** package ‘slam’ successfully unpacked and MD5 sums checked
** libs
gcc -I/opt/R/3.1.0/lib/R/include -DNDEBUG  -I/usr/local/include    -fpic  -g -O2  -c apply.c -o apply.o
gcc -I/opt/R/3.1.0/lib/R/include -DNDEBUG  -I/usr/local/include    -fpic  -g -O2  -c grouped.c -o grouped.o
gcc -I/opt/R/3.1.0/lib/R/include -DNDEBUG  -I/usr/local/include    -fpic  -g -O2  -c sparse.c -o sparse.o
gcc -I/opt/R/3.1.0/lib/R/include -DNDEBUG  -I/usr/local/include    -fpic  -g -O2  -c util.c -o util.o
gcc -shared -L/usr/local/lib -o slam.so apply.o grouped.o sparse.o util.o -L/opt/R/3.1.0/lib/R/lib -lRblas -lgfortran -lm -lquadmath -L/opt/R/3.1.0/lib/R/lib -lR
installing to /home/duckmayr/R/x86_64-unknown-linux-gnu-library/3.1/slam/libs
** R
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (slam)
> oldr::install.compatible.packages("tm")
Installing package into ‘/home/duckmayr/R/x86_64-unknown-linux-gnu-library/3.1’
(as ‘lib’ is unspecified)
* installing *source* package ‘tm’ ...
** package ‘tm’ successfully unpacked and MD5 sums checked
** libs
gcc -I/opt/R/3.1.0/lib/R/include -DNDEBUG  -I/usr/local/include    -fpic  -g -O2  -c copy.c -o copy.o
gcc -shared -L/usr/local/lib -o tm.so copy.o -L/opt/R/3.1.0/lib/R/lib -lR
installing to /home/duckmayr/R/x86_64-unknown-linux-gnu-library/3.1/tm/libs
** R
** data
** inst
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded
* DONE (tm)

更新:在 Windows 上测试

我现在也有机会在 Windows (8.1) 上进行测试,并且将tm 安装到旧版本的 R (v. 3.1.0) 上一切正常:

> oldr::install.compatible.packages("NLP")
Installing package into ‘C:/Users/User/Documents/R/win-library/3.1’
(as ‘lib’ is unspecified)
trying URL 'http://mirror.las.iastate.edu/CRAN/bin/windows/contrib/3.1/NLP_0.1-9.zip'
Content type 'application/zip' length 278699 bytes (272 Kb)
opened URL
downloaded 272 Kb

package ‘NLP’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
        C:\Users\User\AppData\Local\Temp\RtmpojDNlF\downloaded_packages
> oldr::install.compatible.packages("slam")
Installing package into ‘C:/Users/User/Documents/R/win-library/3.1’
(as ‘lib’ is unspecified)
trying URL 'http://mirror.las.iastate.edu/CRAN/bin/windows/contrib/3.1/slam_0.1-32.zip'
Content type 'application/zip' length 111528 bytes (108 Kb)
opened URL
downloaded 108 Kb

package ‘slam’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
        C:\Users\User\AppData\Local\Temp\RtmpojDNlF\downloaded_packages
> oldr::install.compatible.packages("tm")
Installing package into ‘C:/Users/User/Documents/R/win-library/3.1’
(as ‘lib’ is unspecified)
trying URL 'http://mirror.las.iastate.edu/CRAN/bin/windows/contrib/3.1/tm_0.6-2.zip'
Content type 'application/zip' length 710798 bytes (694 Kb)
opened URL
downloaded 694 Kb

package ‘tm’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
        C:\Users\User\AppData\Local\Temp\RtmpojDNlF\downloaded_packages

更新:附加参数

现在用户可以指定尝试安装哪个版本的 R(R_version 参数),以及将包安装到哪个目录(lib 参数),这对于测试或其他目的可能很有用。

【讨论】:

感谢您的工作!我会尽快测试它。最好有一个 R_version 参数,默认情况下是当前版本,但允许安装与早期版本兼容(用于测试或重现性)。 @Moody_Mudskipper 我刚刚添加了几个跨平台和向后兼容性修复,所以一定要拉新的变化。希望这对人们有所帮助;我知道我自己在无法升级 R 版本的服务器上不止一次遇到过这个问题。 @Moody_Mudskipper 这是个好主意。我明天会尝试添加该功能。 @Moody_Mudskipper 我现在实现了这个功能。用户可以指定尝试安装的版本,以及安装包的位置(允许将多个版本安装到不同的库目录)。 我绝对可以尝试一下,我很想看看你的基于 crandb 的解决方案。【参考方案2】:

您可以使用METACRAN mirror:

转到您感兴趣的包的DESCRIPTION 文件的责备页面。

例如对于tm:https://github.com/cran/tm/blame/master/DESCRIPTION

找到Depends 行并根据需要多次单击在此更改之前查看责任图标,直到显示足够旧的 R 版本。

如果您想自动化,最好使用 crandb(也来自 METACRAN)。

旁注:有时包作者将 R (≥ x.y.z) 列为依赖项只是为了安全起见,因为他们使用版本 x.y.z 并且没有对以前的版本进行任何测试。

【讨论】:

谢谢,这很有帮助。关于你的旁注,这是我注意到的,有没有办法在不下载/解压缩/编辑/重建包的情况下安装包? @Moody_Mudskipper 我不知道。【参考方案3】:

您可以下载存档的包,然后解压缩并解压缩它。 DESCRIPTION 文件列出了它需要的 R 版本。在您的情况下,文件 tm_0.5-10.tar.gz(即最新的存档版本,但不是当前版本)具有以下行:

Depends: R (>= 3.0.0)

0.6 版的 tm 包更新了它的依赖关系到 R 大于等于 3.1.0。

【讨论】:

【参考方案4】:

另一种选择是升级您的 R 版本,使其与最新版本的“tm”包兼容。您可以使用以下代码在 R 中轻松做到这一点:

# install the latest installr package: 
install.packages("installr")

# require the latest installr package: 
require(installr)

#run the command to update R
updateR()

HT:http://www.r-statistics.com/2014/07/r-3-1-1-is-released-and-how-to-quickly-update-it-on-windows-os/

【讨论】:

【参考方案5】:

您可以使用groundhog 包。

首先,要查找日期,您可以使用 cross.toc() 函数,该函数将显示所选包的所有发布日期,包括 R 本身。

例如,要获取tm 和 R 的发布日期:

library(groundhog) 
cross.toc(c("tm","R"))

你会得到这样的东西:

132    3.6.1 2019-07-05       R
133    3.6.2 2019-12-12       R
134    0.7-7 2019-12-13      tm
135    3.6.3 2020-02-29       R
136    4.0.0 2020-04-24       R

如果您使用的是 R 3.6.1,您将选择 2019 年 7 月 5 日之后的日期,如果您希望 tm 的 0.7-7 版本在 2019 年 12 月 13 日之后的日期,然后加载该版本

groundhog.library('tm', '2019-12-15')

【讨论】:

以上是关于如何确定哪个旧版本的 R 包与我的 R 版本兼容的主要内容,如果未能解决你的问题,请参考以下文章

在R版本3.4.2上安装PerformanceAnalytics(2017-09-28)

如何找到与我的 react native 版本兼容的 fbsdk 版本?

由于 3.4.4 包不兼容,将 R 更新到 4.0 或更高版本?格维兹

如何使 ggplot2 中的图例与我的情节高度相同?

RODBC 包的替代方案,用于从 R 连接到 MS Access

CUDA 与我的 gcc 版本不兼容