我在R中找到了几篇关于最佳实践,再现性和工作流程的帖子,例如:
一个主要的关注点是确保代码的可移植性,因为将代码移动到新机器(可能运行不同的操作系统)相对简单并且提供相同的结果。
来自Python背景,我已经习惯了虚拟环境的概念。当与简单的所需软件包列表相结合时,这可以确保所安装的软件包和库在任何机器上都可用,而不会有太多麻烦。当然,这并不能保证 - 不同的操作系统有自己的缺点和特点 - 但它可以让你获得95%的路径。
R中是否存在这样的事情?即使它不那么复杂。例如,只需维护所需包的纯文本列表和将安装任何缺失的脚本的脚本吗?
我将第一次认真地开始使用R,可能与Sweave一起使用,并且理想情况下想以最好的方式开始!谢谢你的想法。
答案 0 :(得分:32)
我将使用@cboettig发布的评论来解决这个问题。
Packrat是R的依赖管理系统。为您提供三个重要优势(所有优势都集中在您的可移植性需求上)
隔离:为一个项目安装新的或更新的包不会破坏您的其他项目,反之亦然。那是因为packrat为每个项目提供了自己的私有包库。
便携式:轻松将项目从一台计算机传输到另一台计算机,甚至跨越不同的平台。 Packrat使您可以轻松安装项目所依赖的软件包。
可重复:Packrat会记录您所依赖的确切软件包版本,并确保无论您在何处安装,都可以使用这些版本。
答案 1 :(得分:13)
Anaconda包经理conda
supports creating R environments。
conda create -n r-environment r-essentials r-base
conda activate r-environment
我在使用conda
维护不同的Python安装方面有很好的经验,包括用户特定用户和同一用户的多个版本。我用conda
和jupyter-notebook
测试了R,效果很好。至少对我的需求,包括使用DEseq2
和相关包的RNA测序分析,以及data.table
和dplyr
。 conda
通过bioconda提供了许多生物导体包,根据this SO question的评论,似乎install.packages()
可能也有效。
答案 2 :(得分:9)
似乎RStudio开发人员还有另一个选择renv。它可以在CRAN上使用,并取代Packrat。
简而言之,您使用renv::init()
初始化项目库,并使用renv::snapshot()
/ renv::restore()
保存和加载库的状态。
相对于con-r-enviroments,我更喜欢此选项,因为这里所有内容都存储在文件renv.lock
中,该文件可以提交给Git存储库并分发给团队。
答案 3 :(得分:1)
查看R容器管理解决方案roveR。有关详细信息,请参阅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许可证。您可以通过上面链接的演示文稿中的电子邮件地址与我们联系。
答案 4 :(得分:0)
要添加到此:
注意: 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笔记本,让聚会开始
(r_environment_name) C:\> jupyter notebook
对于类似的“ requirements.txt”,也许此链接会有所帮助-> Is there something like requirements.txt for R?
答案 5 :(得分:-1)
如果您要做的只是检查代码是否可以在其他设置上运行,我建议至少在目前免费通过rstudio cloud进行测试。