R中的虚拟环境?
我发现了几个关于R语言最佳实践、可重复性和工作流程的帖子,比如:
一个主要关注点是确保代码的可移植性,也就是说,把代码搬到一台新机器上(可能是不同的操作系统)时,过程应该相对简单,并且结果应该是一样的。
我之前使用Python,所以我习惯了虚拟环境的概念。配合一个简单的所需包列表,这样可以确保在任何机器上都能轻松找到安装好的包和库。虽然这并不能保证万无一失——不同的操作系统有各自的小毛病和特殊之处——但这已经能解决95%的问题了。
在R语言中有没有类似的东西?即使它不那么复杂。比如说,简单地维护一个所需包的纯文本列表,以及一个可以安装缺失包的脚本?
我准备第一次认真使用R,可能还会结合Sweave,理想情况下我希望能以最好的方式开始!谢谢你的建议。
6 个回答
看看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,你可以使用我们的laiR实例,地址是https://lair.ownr.io。如果你想上传自己的包并与组织分享,就需要一个laiR许可证。你可以通过上面链接中的邮箱联系我们。
补充一下:
注意事项:
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的东西?
Anaconda的包管理工具conda
可以用来创建R语言的环境。
conda create -n r-environment r-essentials r-base
conda activate r-environment
我用conda
来管理不同的Python版本,体验非常好。无论是针对某个用户的安装,还是同一个用户的多个版本,我都能轻松搞定。我还用conda
测试了R语言和jupyter-notebook
,效果也很好。至少对我来说是这样,因为我需要进行RNA测序分析,使用了DEseq2
和相关的包,还有data.table
和dplyr
。在conda
上有很多生物信息学相关的包可以通过bioconda获取。根据在这个问题下的评论,似乎install.packages()
也可以用来安装。
我将使用@cboettig发布的评论来解决这个问题。
Packrat
Packrat是一个用于R语言的依赖管理系统。它给你带来了三个重要的好处(这些好处都与项目的可移植性有关)
隔离性:为一个项目安装新的或更新的包不会影响到其他项目,反之亦然。这是因为Packrat为每个项目提供了自己的私有包库。
可移植性:可以轻松地将你的项目从一台电脑转移到另一台,甚至在不同的平台之间。Packrat让安装项目所需的包变得简单。
可重现性:Packrat记录了你所依赖的确切包版本,并确保在你去的任何地方都安装这些确切的版本。
接下来做什么?
在RStudio中使用Packrat: http://rstudio.github.io/packrat/rstudio.html
看起来RStudio的开发者们提供了另一个选择,叫做renv。这个工具可以在CRAN上找到,它是Packrat的升级版。
简单来说,你可以用renv::init()
来初始化你的项目库,然后用renv::snapshot()
和renv::restore()
来保存和加载你库的状态。
我更喜欢这个选项而不是conda的R环境,因为在这里,所有的内容都存储在一个叫renv.lock
的文件里,这个文件可以提交到Git仓库,方便团队共享。