141-R小技巧-R包的多版本控制

刘小泽写于19.10.16

遇到的问题

分析单细胞数据时,需要同时检查Seurat2和Seurat3两种版本的结果差异,而且生成的文件很大(几个G的RData),因此用两台电脑分别分析再将结果放到一起的办法行不通。

常用的解决方案

第一种:一次一个版本,使用R包降级

比如我现在的版本是3.1.0,想换成2.3.4再分析

remove.packages('Seurat')
pkgs = c( 'mixtools', 'lars', 'dtw', 'doSNOW', 'hdf5r' ) 
BiocManager::install(pkgs,ask = F,update = F)
# 以后只需要修改这个版本号即可
packageurl <- "https://cran.r-project.org/src/contrib/Archive/Seurat/Seurat_2.3.4.tar.gz"
install.packages(packageurl, repos=NULL, type="source")

这样的优点是便于操作,对于版本切换不频繁的使用者来说,用一两次还是可以的。不过要做好切换一次再次切换回来的时间准备,另外其中的hdf5r包安装有时会出问题

第二种:同时安装多个版本,再切换

首先新建一个安装路径
mkdir ~/R/3.6.0/library

然后将这个路径加到默认的搜索路径中

# 先看看当前有什么路径
.libPaths()
# 然后加入新路径
myPaths <- .libPaths()  
new <- c('~/R/3.6.0/library')
myPaths <- c(myPaths, new) 
.libPaths(myPaths) 

如果说原来的路径中安装了Seurat的3.1.0版本,现在想在新的~/R/3.6.0/library中安装一个2.3.4版本,可以先将默认搜索路径切换到新的

# 切换路径也很简单[假如目前只有两个路径,把新路径提到优先搜索的位置]
myPaths <- .libPaths()   
myPaths <- c(myPaths[2], myPaths[1])  
.libPaths(myPaths) 
然后再新路径中安装2.3.4版本
packageurl <- "https://cran.r-project.org/src/contrib/Archive/Seurat/Seurat_2.3.4.tar.gz"
install.packages(packageurl, repos=NULL, type="source")

注意!如果之前运行过Seurat,要将原来已经加载的版本先卸载掉,然后才能加载新的版本

# 先把原来的版本移除
detach("package:Seurat", unload=TRUE)
# 再重新加载新版本[使用一个参数指定我们要加载哪个库中的包]
library(Seurat, lib.loc="~/R/3.6.0/library") 

这样的好处就是:以后再安装存在多个版本的R包的时候,就可以使用detach() + library(name, lib.loc=) 的方法。不过自己就要记好哪个版本在哪个路径中


一气呵成的版本

# 原本有4个R包路径,现在再添加一个
myPaths <- .libPaths()  
new <- c('~/r-2nd-pkgs')
myPaths <- c(myPaths, new) 
.libPaths(myPaths) 
.libPaths()

# 接下来调整位置,第一个是默认安装路径(位置随意调整)
myPaths <- .libPaths()  
myPaths <- c(myPaths[5], myPaths[2],myPaths[1],myPaths[3],myPaths[4])  
.libPaths(myPaths) 
.libPaths()

# 接下来就能在新的路径下安装其他版本了,例如安装seurat 2.3.4,它还需要其他依赖包
pkgs = c( 'mixtools', 'lars', 'dtw', 'doSNOW', 'hdf5r','fpc','foreach' ) 
BiocManager::install(pkgs,ask = F,update = F)
packageurl <- "https://cran.r-project.org/src/contrib/Archive/Seurat/Seurat_2.3.4.tar.gz"
install.packages(packageurl, repos=NULL, type="source")

# 最后卸载之前的版本,加载新建版本
detach("package:Seurat", unload=TRUE)
library(Seurat, lib.loc="~/r-2nd-pkgs") 
packageVersion('Seurat')
Yunze Liu
Yunze Liu
Bioinformatics Sharer

Co-founder of Bioinfoplanet(生信星球)

Next
Previous

Related