R中的虚拟环境?

91

我发现了几篇关于R语言中最佳实践、可重复性和工作流程的帖子,例如:

其中一个主要问题是确保代码的可移植性,即将代码移到新机器上(可能运行不同的操作系统)应该相对简单,并且会产生相同的结果。

作为一个Python开发者,我习惯于虚拟环境的概念。当与一份简单的所需包列表结合使用时,这在一定程度上确保已安装的包和库可在任何机器上轻松使用。当然,这并不能完全保证——不同的操作系统有各自的小问题和特殊情况——但它能够解决95%的问题。

R语言中是否存在这样的东西?即使不像Python那样复杂也可以。例如仅维护所需包的纯文本列表和一个脚本,用于安装任何缺少的包?

我将开始认真使用R语言,可能与Sweave一起使用,并希望以最佳方式开始!谢谢您的建议。


4
好问题。我投票将其迁移到SO上。这个问题没有统计学内容,因此 SO 的人可能会给出更好的答案。 - Momo
5
Renv可能是您正在寻找的:https://github.com/viking/Renv - hrbrmstr
8
维护软件包列表并将它们与系统库隔离开来,这正是R语言中的Packrat所做的:http://rstudio.github.io/packrat/。 - cboettig
2
有人应该在正式答案中回答,而不是在评论中。我不太了解R语言,但从查看链接来看,Renv似乎只是管理R语言的版本,而Packrat的文档听起来更像是virtualenv的匹配项,在其中您可以在不同的项目中使用相同的语言版本和不同的依赖项集。 - Joe Germuska
3
@Gabriel 请考虑接受不同的答案,因为目前被接受的那个已经过时且具有误导性。现在正确的答案是https://dev59.com/CGAf5IYBdhLWcg3wyVJ1#60529391。 - Konrad Rudolph
显示剩余3条评论
6个回答

50

我将使用@cboettig发布的评论来解决这个问题。

Packrat

Packrat是R语言的依赖管理系统。它给您带来三个重要优势(所有优势都聚焦于您的可移植性需求)

  • 隔离:为一个项目安装新的或更新的软件包不会破坏您的其他项目,反之亦然。这是因为Packrat为每个项目提供其自己的私有软件包库。

  • 易传输:轻松地将您的项目从一台计算机传输到另一台,甚至跨不同平台。Packrat使得安装项目所依赖的软件包变得容易。

  • 可重现:Packrat记录了您所依赖的确切软件包版本,并确保这些确切版本在您去任何地方时都会被安装。

接下来怎么做?

  1. 步骤指南:http://rstudio.github.io/packrat/walkthrough.html

  2. 常用命令:http://rstudio.github.io/packrat/commands.html

  3. 使用Packrat与RStudio:http://rstudio.github.io/packrat/rstudio.html

  4. 限制和注意事项:http://rstudio.github.io/packrat/limitations.html

更新:Packrat已经被软弃用,现在由renv取代,因此您可能想查看这个软件包。


4
如何使用Packrat的方式在requirements.txt文件中捕获你的依赖,并通过pip install -r ...进行安装? - Nick Chammas
我不知道为什么,但packrat在安装软件包时非常慢。每次尝试下载新软件包都会浪费两天的时间。 - D_Serg
@Nick 这里的文档(https://rstudio.github.io/packrat/commands.html)展示了一个 snapshot 命令。 - Mike O'Connor

34
看起来RStudio开发人员提供了另一个选项renv。它可以在CRAN上使用,代替Packrat。
简而言之,您可以使用renv::init()初始化项目库,并使用renv::snapshot()/renv::restore()保存和加载库的状态。
与conda r-enviroments相比,我更喜欢这个选项,因为所有内容都存储在renv.lock文件中,可以提交到Git repo并分发给团队。

5
这个答案应该成为当前时代的被采纳答案。 - Oliver
4
提醒一下,截至2021年5月26日,renv和Bioconductor包存在相当多的未解决问题(其中一些我亲身经历过)。 https://github.com/rstudio/renv/issues?q=bioconductor 。目前对我来说有点致命。 - KeelyD

32
安装程序管理器Anaconda的conda支持创建R环境
conda create -n r-environment r-essentials r-base
conda activate r-environment

我非常喜欢使用conda来维护不同的Python安装程序,包括用户特定的安装程序以及为同一用户安装的多个版本。我已经使用conda测试了R和jupyter-notebook,效果非常好。至少对于我的需求而言,这包括使用DEseq2和相关套件进行RNA测序分析,以及使用data.tabledplyr。通过bioconda,在conda中可以获得许多Bioconductor软件包,根据this SO question上的评论,似乎也可以使用install.packages()


我现在也进入了生物信息学领域,因此你的答案变得更加相关了!你用什么集成开发环境?我在将conda整合到Rstudio中遇到了困难——它不想使用正确的解释器路径。 - Gabriel
1
很有趣!我大多数需求都使用jupyter-notebook。我以前使用过Rstudio,但我记得在conda上运行它时也遇到了一些麻烦,而且我习惯于使用python的notebook(这是我迄今为止最常用的),所以那里是我感觉最舒适的地方。 - joelostblom
我的conda R仍然显示了我非conda R的库位置在.libPaths()中,并且尝试在那里安装新包,所以我不得不在终端中运行export R_LIBS_USER="/path/to/miniconda2/envs/r.3.3/lib/R/library",然后启动R并尝试安装包。仍在测试,但看起来它正在工作。 - user5359531

1
要补充一点:
注意: 1. 已经安装了Anaconda 2. 假定您的工作目录是"C:"
创建所需环境 -> "r_environment_name"
C:\>conda create -n "r_environment_name" r-essentials r-base

查看可用环境

C:\>conda info --envs

激活环境

C:\>conda activate "r_environment_name"

(r_environment_name) C:\>

启动Jupyter Notebook,让派对开始吧!

(r_environment_name) C:\> jupyter notebook

如果你需要类似于 "requirements.txt" 的文件,也许这个链接可以帮到你 -> 有没有类似于R的 requirements.txt 文件?


0

了解一下 roveR,这是一个 R 容器管理解决方案。详情请参见 https://www.slideshare.net/DavidKunFF/ownr-technical-introduction,特别是第 12 张幻灯片。

要安装 roveR,请在 R 中执行以下命令:

install.packages("rover", repos = c("https://lair.functionalfinances.com/repos/shared", "https://lair.functionalfinances.com/repos/cran"))

为了充分利用 roveR 的功能(包括安装特定版本的软件包以实现可重复性),您需要访问 laiR - 对于 CRAN,您可以使用我们在 https://lair.ownr.io 上的 laiR 实例;如果您想上传自己的软件包并与组织共享,则需要 laiR 许可证。您可以通过上面链接的演示文稿中提供的电子邮件地址与我们联系。

我认为这个资源已经不存在了。 - Hack-R
是的,slideshare已经消失了。我也无法连接到此答案中提到的两个存储库,也无法连接https://lair.ownr.io/。 - Ken Williams
抱歉,laiR暂时离线了,我们正在将其集成到我们的其他产品(ownR平台)中,尽快使其再次可用。 - David Kun
目前无法提供内容,似乎这不是当前的答案。 - baxx

0

对于 .ipynb 文件,只需要一个 R 内核就足够了,无需安装带有 R 的虚拟环境,只需执行以下操作:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接