如何安装和管理多个版本的R软件包

如何安装和管理多个版本的R软件包,r,ubuntu,cran,R,Ubuntu,Cran,我正在开发一个用R进行可复制计算的框架。我正在努力解决的一个问题是,一些R代码可能在软件包的X.Y-Z版本中运行得很好,但是为什么3年后你要尝试复制它呢?软件包已经更新了,一些函数已经更改了,代码不再运行了。例如,此问题也会影响使用包的Swave文档 自信地再现结果的唯一方法是安装R版本和原始作者使用的软件包版本。如果这是一个单一的案例,人们可以从CRAN档案中提取资料并安装适当的版本。但对于我的框架来说,这是不切实际的,我需要预先安装软件包版本 现在假设我只使用R的一个版本,例如2.14。安装

我正在开发一个用R进行可复制计算的框架。我正在努力解决的一个问题是,一些R代码可能在软件包的X.Y-Z版本中运行得很好,但是为什么3年后你要尝试复制它呢?软件包已经更新了,一些函数已经更改了,代码不再运行了。例如,此问题也会影响使用包的Swave文档

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

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


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

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

我会尝试修改描述文件,并通过添加版本号来更改“Package”字段

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

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

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

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

  • 虚拟机:这提供了完整的通用性。我的功能不太强大的box可以轻松处理三台虚拟机:Debian i386、Ubuntu i386以及Windoze XP。为此,我目前使用KVM和libvirt;这是Linux特有的。我过去也使用过VirtualBox和VMware


您熟悉devtools包中的dev_模式吗?IIRC正在解决一个类似的问题。不是真的。它只是将您的libpath更改为某个临时沙盒目录。但除此之外,它没有提供任何系统。它是一个复制品。请看我的回答:“那些不了解软件包管理系统的人注定要彻底改造它,很糟糕。”我向赫伯特·斯宾塞道歉。西蒙在下面是正确的。您可以通过.libPath等处理所有这些。我喜欢项目特定库的想法:因此每个项目都有自己的库,其中包含每个包的正确版本。此外,然后,您可以将环境变量R_LIBS更改为该项目的适当目录。由于您破坏了所有依赖关系,因此使用包名更为危险。库路径设计为使用不同的包名称播放。