问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

R包版本管理利器:renv使用初探

创作时间:
作者:
@小白创作中心

R包版本管理利器:renv使用初探

引用
1
来源
1.
https://cloud.tencent.com/developer/article/2480484

R包版本管理在数据分析和科学研究中至关重要,特别是在团队协作或项目依赖特定版本的包时。本文将介绍一个强大的R包版本管理工具——renv,通过一个实际案例,展示如何使用renv来解决包版本冲突问题。

写在开头

在整理scCustomize助力轻松优化FeaturePlot可视化推文时,遇到了Nebulosa包的版本兼容问题。Nebulosa包依赖的ggplot2版本是3.4.4以下的,而系统中安装的是3.5.1版本。为了解决这个问题,我尝试使用renv创建虚拟环境来管理不同版本的R包。

安装和初始化 renv

安装和加载renv

install.packages("renv")
library(renv)

初始化 renv 环境

在指定的R 项目的工作目录中初始化 renv,从而为该项目创建一个独立的虚拟环境,记录并锁定项目所需的包及其版本。

renv::init()

这将创建一个 renv 子目录,在该目录中保存包和虚拟环境,并在项目目录下创建 renv.lock 文件,用于记录当前项目中使用的包及其版本。同时,配置项目使用一个独立的库(包管理环境),避免使用系统全局的 R 包。

安装需要版本的R包

很有意思的安装代码,直接在后面@需要的版本,然后确实就可以安装需要版本的ggplot2

renv::install("ggplot2@3.4.4")

但是因为拷贝R包的时候,将3.5.1版本的ggplot2复制过来了,所以需要先卸载3.5.1的ggplot2,重新创建虚拟环境,然后安装3.4.4的ggplot2

(因为不太熟练不清楚是否可以不复制特定的包,所以就是先卸载掉然后创建好虚拟环境后直接安装3.4.4,后续在正常环境下直接安装ggplot2就是高版本的)

renv::install("ggplot2@3.4.4")

renv 会自动安装并锁定该版本,然后更新 renv.lock 文件以反映该版本的信息。

正常运行密度图

library(Nebulosa)
library(scCustomize)
library(ggplot2)
packageVersion("ggplot2")
Plot_Density_Joint_Only(seurat_object = pbmc, 
                        features = c("CD3D", "CD3E","CD4"),
                        custom_palette = BlueAndRed())

在小环境中安装好3.4.4版本的ggplot2之后,就可以正常调用Nebulosa去绘制多基因密度图

关于renv

既然已经用到了renv的虚拟环境,那咱们还是需要对其有个基本的了解

已经介绍了安装renv、创建虚拟环境以及安装指定版本的R包,那接下来了解一下别的基本命令

激活项目的虚拟环境

当我们退出或者关闭当前的Rstudio工作目录,重新打开时,如果需要使用虚拟环境,就需要先激活一下

renv::activate()

恢复或同步包环境

如果在团队合作中或在不同设备上工作,并且需要确保你使用的 R 包与项目中锁定的版本一致,可以使用 renv::restore() 来恢复环境。

renv::restore()

这个我还没用过,因为没有换设备hhh,有需要的可以试试

切换包版本

  • 通过
renv::remove()

卸载包,然后使用

renv::install()

安装所需版本。

  • 查看和管理环境:使用
renv::status()

renv::installed()

来查看和管理当前环境中的包。

退出虚拟环境

renv::deactivate()

停用当前的虚拟环境,恢复到全局的 R 包库中。项目中的 renv 环境会被关闭,所有的包操作将会使用全局安装的包,而不再使用项目专用的虚拟环境。

有点类似与linux里面使用conda创建小环境的感觉了

通过运行

renv::deactivate()

,你可以退出当前的 renv 虚拟环境,回到全局 R 环境。如果以后需要重新启用该环境,只需使用

renv::activate()

不过就是每次进入或者退出,都会默认重新启动一下Rsession

重复运行renv::init()的选项

当我们创建并进入到虚拟环境中,但是你又重新运行一遍

renv::init()

,就会出现一些选项,让你确认是否需要重新创建一个虚拟环境

这些选项分别为:

  • Restore the project from the lockfile:恢复锁定文件中的包版本。
  • Discard the lockfile and re-initialize the project:丢弃现有的 renv.lock 文件,重新初始化项目并创建新的环境。
  • Activate the project without snapshotting or installing any packages:激活当前环境,但不进行任何包安装或更新。
  • Abort project initialization:取消当前初始化操作。

本文参与 腾讯云开发者社区同步曝光计划,分享自微信公众号。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号