在Rstudio中使用同一个R包的不同版本

文摘   科技   2024-12-10 09:05   江苏  

原理

在大家使用Rstudio-server时(有root权限的共享服务器),R本身不支持在一个目录下安装同一个包的多个版本,在加载 R 包时,它按照系统中配置的 libpaths 的优先级从高到低查找,在某个 libpath 下找到这个包后,将这个包加载到环境中,即使后面找到这个包的其他版本,也不会再次加载了(R包加载机制)。如:在执行 library(“uwot”) 时,R 就会依次搜索 libpath 找到 uwot 的位置,即使 libpaths 中有多个 uwot,它找到第一个 uwot 后,就将 uwot 加载到环境中,而不会再加载后续找到的 uwot 包到环境中了。不过我们可以将当前加载到环境中的 uwot 这个包 unload,然后加载其他 libpath 中的 uwot 包。后面我们会演示这个步骤。(切换 uwot 版本的原理)
如果你对下面的教程比较迷茫,那么你可以先行学习Linux教程:
十小时学会Linux
生信Linux及服务器使用技巧

如果你的计算机不足以支持下面流程的计算,可按需选用适合自己的计算资源:
共享(经济实惠):有root权限的共享服务器,报我名字立减200¥
独享(省电省心):生信分析不求人

实体(稳定高效):为实验室准备一份生物信息学不动产

访问链接:https://biomamba.xiyoucloud.net/

更多内容可咨询客服微信[Biomamba_yunying]


# 查看系统中配置好的 libpath 输出,按照优先级从高到低的方式输出.libPaths()# 示例输出:[1] "/home/txb/R/x86_64-pc-linux-gnu-library/4.2"[2] "/usr/local/lib/R/site-library"              [3] "/usr/lib/R/site-library"                    [4] "/usr/lib/R/library" 


如图:/home/txb/rpackage 目录下的初始 uwot 版本是 0.1.14,我在这个目录下重新安装了 uwot 的 0.1.13 版本。两个版本没有共存,而是将原来的 uwot 0.1.14 版本卸载掉了,安装上了 uwot 的 0.1.13 版本。这就是我们为什么要构造新的 libpath 的原因 —— 同一个 libpath 下的包只有1个版本。



实现方式


R 包的安装目录是使用 lib 参数指定的,指定这个参数可以将 R 包下载到对应的目录。在指定目录下安装好R包后,通过 .libPaths() 函数将该目录配置为新增的 libpath。通过在 Console 中执行 .libPaths() 函数配置好的 libpath 仅在当前 rsession 中生效,“Start New Session” 之后,配置的 libpath 就会失效。为了让 .libPaths() 配置的 libpath 永久生效,可以将相关的配置命令写入的 ~/.Rprofile 中,这样在“Start New Session” 之后,配置的 libpath 依然有效。


实现方式 1: 将 R 包安装在 rpackage 目录并配置

# 将包安装在指定的 libpath 示例:# 注意:libpath 必须在系统中存在,如果不存在,需要新建对应的目录:mkdir -p /home/txb/rpackage
# 将 R 包下载在指定目录命令示例:remotes::install_github("jlmelville/uwot", lib="/home/txb/rpackage")install.packages("xxx", lib="/home/txb/rpackage")devtools::install_github("xxx/xxx", lib="/home/txb/rpackage")BiocManager::install("xxx", lib="/home/txb/rpackage")
# 查看未添加 libpath 之前 uwot 的版本library("uwot")packageVersion("uwot")# 向 R 包的 libpaths 中新增一个 libpath,并将它放在第 1 个元素 (最高优先级).libPaths(c("/home/txb/rpackage",.libPaths()))# 查看添加 libpath 之后 uwot 的版本library("uwot")packageVersion("uwot")


实现方式 2:使用 conda 安装 R 包并配置 libpath

# 使用 conda 安装指定版本的 R 包## 创建 conda 环境conda create -n r-reticulate r-uwot==0.1.11 -yconda activate r-reticulate 
# 配置 libpath.libPaths(c("/home/txb/miniconda3/envs/r-reticulate/lib/R/library", .libPaths()))
# 查看此时 R 找到的第 1 个 R 包的版本。library("uwot")packageVersion("uwot")



效果演示

结合 rstudio-server 查看 R 包的版本。在这个步骤我先 “Start New Session” 将原先配置的 libpath 取消掉(后面会说明原因)
.libPaths(c("/home/txb/rpackage",.libPaths()))library("uwot")packageVersion("uwot")
.libPaths(c("/home/txb/miniconda3/envs/r-reticulate/lib/R/library", .libPaths()))library("uwot")packageVersion("uwot")
# Seurat 中会 import uwot,此时 uwot 无法 unload,想要切换 uwot 版本,有两种方式。# 1. 将 Seurat unload# 2. “Start New Session”,然后再选中想要使用的 uwot 版本 (推荐)library("Seurat")detach("package:Seurat", unload = TRUE)

# 让 libpath 永久生效,将相关命令写入到文件file.edit("~/.Rprofile")


加载指定libpath下的R包
# lib 参数指定 libpath,即从那个目录下加载 R 包library("remotes", lib = "xxx")


查看已经加载的R包

(.packages())



如何联系我们

公众号后台消息回复不便,这里给大家留一下领取资料及免费服务器(足够支持你完成硕博生涯的生信环境)的微信号,方便各位随时交流、提建议(别问在么,添加时直接说来意)。此外呼声一直很高的交流群也建好了,欢迎大家入群讨论:

永久免费的生信、科研交流群

大家可以阅读完这几篇之后添加
给生信入门初学者的小贴士
如何搜索公众号过往发布内容

您点的每个赞和在看,我都认真当成了喜欢



Biomamba 生信基地
本人为在读博士研究生,此公众号旨在分享生信知识及科研经验与体会,欢迎各位同学、老师与专家的批评指正,也欢迎各界人士的合作与交流。
 最新文章