我正在用R开发一个可重复计算的框架。我正在努力解决的一个问题是,某些R代码可能在包的版本XY-Z中完美运行,但是为什么你试图在3年后重现它,软件包已更新,某些功能已更改,代码不再运行。此问题也会影响使用包的Sweave文档。
自信地重现结果的唯一方法是安装原始作者使用的R版本和软件包版本。如果这是一个案例,可以从CRAN档案中提取内容并安装适当的版本。但对于我的框架,这是不切实际的,我需要预先安装软件包版本。
现在假设我将自己限制在单个版本的R,例如2.14。安装许多版本的R软件包的实用方法是什么,以便我可以动态加载它们?我想我可以为每个包的每个版本创建单独的库目录,然后在加载它们时使用自定义lib.loc参数。但这会很混乱。任何提示或以前尝试做类似的事情?
我的框架在Ubuntu服务器上运行。
答案 0 :(得分:4)
您可以安装包含版本的软件包(例如,重命名为foo_1.0
目录而不是foo
),并将要重新创建给定R +软件包快照的版本软链接到一个库中。显然,这些包实际上可以存在于一个单独的树中,因此您可以拥有library.projectX/foo
- > library.all/foo/1.0
。
答案 1 :(得分: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。
答案 2 :(得分:-1)
我会尝试修改DESCRIPTION文件,并通过添加版本号来更改“Package”字段。
例如,您从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库路径对我来说似乎很危险。