【发布时间】:2016-08-08 20:43:54
【问题描述】:
我正在进行一个新项目,其中包含大量依赖项的 R 代码,以及特定版本的 R (3.1.1)。当他们最初编写代码时,他们使用 R 的install.package('the-package') 下载最新版本,但是现在许多依赖项都有新版本,这使得它们与使用的 R 版本不兼容(某些软件包的最新版本,例如 dplyr、rcpp需要 R 升级,这是不可能的)
从这个经验来看,R 似乎拥有最糟糕的包管理器——我来自 NPM,您可以在其中指定每个包和所需包的特定版本。手动解决这些依赖关系是一个巨大的痛苦(持续 5 多个小时),因为显然默认行为是始终下载任何包的前沿。到目前为止,我已经相对成功了,单击包的 CRAN 页面上的“旧资源”链接,下载 tars 然后从它们安装..但这似乎是很多不必要的痛苦。我有一个团队成员关注this guide 以获取我需要的所有依赖项和版本的列表(这至少让我有可能预先安装所有软件包,然后继续试错,而不是解决每次在我的新环境中构建失败时,都会有 50 多个依赖项).. 但是没有“R,处理我的依赖项文件”命令。
- Javascript - 你使用 NPM 从 package.json 安装。
- Python - 你可以使用
pip freeze和pip install pip_freeze.txt,同样的概念 - R - 据我所知,如果您像我一样有特定需求,没有简单的方法可以准确下载您需要的内容
这是一个外壳脚本,可以轻松修改以下载特定版本的包
#!/bin/bash
# CRAN doesn't have a version of this installable in our old R.
wget -P /tmp https://cran.r-project.org/src/contrib/Archive/Rcpp/Rcpp_0.12.5.tar.gz || { echo 'wget failed'; exit 1; }
Rscript -e "install.packages('/tmp/Rcpp_0.12.5.tar.gz', repos = NULL, type='source')" 2>&1 | tee -a rPkgInstall.log
if egrep "non-zero exit status|Error in install.packages|^package .* is not available" rPkgInstall.log; then
echo 'FAILED';
exit 1;
fi
我怎样才能让下一个加入团队的人更轻松地完成这个过程?文档可以走很长的路,但我正在寻找的是 R 中的功能包管理器......或者允许我在 R 中做与 NPM install (from a package.json) 相同的约定
【问题讨论】:
-
去检查检查点包。它将允许您穿越到 2014 年底开始的特定日期,并在 CRAN 上获取当时版本的所有包。
标签: r package-managers