为什么要用conda来安装一个R包

2022-05-23 14:11:50 浏览数 (1)

正常情况下,我们的R包都是依附于R语言环境,常见的情况是在个人电脑的Rstudio这样的界面软件安装的。但是单细胞数据处理相关R包有一点点特殊, 它首先依赖的包特别多,其次很有可能是并不会在个人电脑里面安装,也就是说不一定有Rstudio这样的界面软件给你。

比如最近有小伙伴问到了popsicleR这个包,它还在GitHub上面,官网是:https://github.com/bicciatolab/popsicleR

它也有很多依赖包,而且官网文档写的很清楚,关于它的安装方式,就是下面的一句话即可:

代码语言:javascript复制
devtools::install_github("bicciatolab/popsicleR")

在GitHub的包,都是使用 install_github 函数,不过少部分小伙伴可能会失败,因为他们访问GitHub会失败。

另外就是,大家在安装它的时候,它没办法很好的自动解决它自己的依赖问题,所以官网给了其系列依赖包的独立安装方式。

首先是在cran的

代码如下所示:

代码语言:javascript复制
CRANdep <- c("Seurat","reticulate","R.utils","dplyr","ggplot2","clustree","ape","gtools",
"future","grid","gridExtra","magrittr","limma","patchwork",
"crayon","ggExtra","RColorBrewer","ggplotify","RANN","umap",
"celldex","curl","httr","lattice","session","shinythemes","usethis","rcmdcheck",
"roxygen2","rversions","devtools","pheatmap","BiocManager","corrplot")
newPackages <- CRANdep[!(CRANdep %in% installed.packages()[,"Package"])]
newPackages
if(length(newPackages)){install.packages(newPackages)}

一般来说,大家的电脑里面应该是有绝大部分依赖包了,所以可以自己看看 newPackages 里面是哪些包缺乏。

其次是cran 的Archive

cran 的Archive有历史版本,如果你的包的依赖包有版本要求,就可以额外指定,代码如下所示:

代码语言:javascript复制
CRANarcdep <- c("Matrix","optimbase","optimsimplex","neldermead")
newPackages <- CRANarcdep[!(CRANarcdep %in% installed.packages()[,"Package"])]
if(length(newPackages)){
 packagesurl <- c("https://cran.r-project.org/src/contrib/Archive/Matrix/Matrix_1.3-2.tar.gz",
 "https://cran.r-project.org/src/contrib/Archive/optimbase/optimbase_1.0-9.tar.gz",
 "https://cran.r-project.org/src/contrib/Archive/optimsimplex/optimsimplex_1.0-7.tar.gz",
 "https://cran.r-project.org/src/contrib/Archive/neldermead/neldermead_1.0-11.tar.gz")
 for (i in 1:length(newPackages)){
  source_repo <- packagesurl[grep(newPackages[i], packagesurl)]
  install.packages(source_repo, repos=NULL, type="source")
 } 
}

接下来是bioconductor的

专门存放生物信息学相关的包,代码如下所示:

代码语言:javascript复制
BioCdep <- c("SingleR","limma","BiocFileCache","AnnotationHub",
"ExperimentHub","celldex","scDblFinder")
newPackages <- BioCdep[!(BioCdep %in% installed.packages()[,"Package"])]
if(length(newPackages)){BiocManager::install(newPackages)}

还有GitHub包

如果你需要安装包依赖了一个仍然是在GitHub的包,就只能说自己独立安装依赖了。代码如下所示:

代码语言:javascript复制

if(!"scMCA"%in% installed.packages()[,"Package"]){devtools::install_github("ggjlab/scMCA")}

如果你觉得上面的代码很麻烦

而且你是在Linux环境下面,黑白命令行运行你的代码,其实有一个很简单的解决方案,就是使用conda,一句话安装它。官网文档给了一个 https://github.com/bicciatolab/popsicleR/blob/main/docs/popsicleR.yml, 可以看到内容如下所示:

yaml格式的文件

所以,使用下面的3句话代码即可;

代码语言:javascript复制
wget https://raw.githubusercontent.com/bicciatolab/popsicleR/main/docs/popsicleR.yml 
 conda env create -n popsicleR -f popsicleR.yml 
conda activate popsicleR

不过,如果你不会conda,就有点麻烦了。

0 人点赞