21

我正在开发一个使用 R 进行可重现计算的框架。我正在努力解决的一个问题是,一些 R 代码可能在包的 XY-Z 版本中完美运行,但是为什么你在 3 年后尝试重现它,这些包有更新了,一些功能改变了,代码不再运行了。例如,此问题也会影响使用包的 Sweave 文档。

自信地重现结果的唯一方法是安装原始作者使用的 R 版本和包的版本。如果这是一个单一的案例,可以从 CRAN 档案中提取内容并安装适当的版本。但对于我的框架来说,这是不切实际的,我需要预先安装软件包版本。

现在假设我将自己限制在单一版本的 R,例如 2.14。安装许多版本的 R 包的实用方法是什么,以便我可以即时加载它们?我想我可以做一些事情,比如为每个包的每个版本创建单独的库目录,然后在加载它们时使用自定义 lib.loc 参数。不过这会很混乱。任何提示或以前尝试做类似的事情?

我的框架在 Ubuntu 服务器上运行。

4

3 回答 3

4

您可以安装带有版本的包(例如,重命名为foo_1.0目录而不是foo)并将您想要重新创建给定 R + 包快照的版本软链接到一个库中。显然,这些包实际上可以存在于一个单独的树中,所以你可以有library.projectX/foo-> library.all/foo/1.0

于 2012-01-14T08:36:46.087 回答
1

操作系统为您提供了更多完全分离的句柄,而 Debian / Ubuntu 堆栈是其中的一大堆。我玩过的两个是

  • chroot 环境:我们使用它来完成与主机分离的构建环境。例如,我制作的所有 Debian 上传文件都是在我的 amd64 Ubuntu 服务器上托管的 i386 pbuilder chroot 中构建的。Chroot 是一个非常强大的 Unix 系统调用。Chroots,尤其是在它之上构建的 pbuilder 系统(用于 Debian 软件包构建)旨在无头操作。

  • 虚拟机:这为您提供了全面的通用性。我不那么强大的盒子可以轻松处理三个虚拟机:Debian i386、Ubuntu i386 以及 Windoze XP。为此,我目前使用 KVM 和 libvirt;这是特定于 Linux 的。我过去也使用过 VirtualBox 和 VMware。

于 2012-01-14T18:23:15.790 回答
-1

我会尝试修改DESCRIPTION文件,并通过添加版本号来更改“包”字段。

例如,您从 CRAN 页面 (http://cran.r-project.org/web/packages/pls/) 下载包源 a。将压缩文件 (pls_2.3-0.zip) 解压缩到目录 ("pls/")。以下步骤是更改DESCRIPTION(“pls/DESCRIPTION”)中的软件包名称并使用R命令“R CMD INSTALL pls/”进行安装,其中“pls/”是带有修改后的DESCRIPTION文件的软件包源的路径。

玩 R 库路径对我来说似乎是一件危险的事情。

于 2012-01-14T14:45:45.197 回答