因为直接根据R语言官网的描述,CentOS 7系统安装的R是3.6.0版本的,而Seurat包要求R-4.0.0以上版本,所以在这里记录下自己安装R-4.2.0以及几个R包的过程。
下载R-4.2.0安装包
$ wget https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/base/R-4/R-4.2.0.tar.gz
$ tar-zxvf R-4.2.0.tar.gz
配置
$ ./configure --enable-R-shlib=yes --prefix=/disks/software/R-4.2.0
安装
$ make
$ make install
注意此时的R-4.2.0安装的位置与默认位置不同,需要创建aliases
默认的R
$ alias R3.6.0=/usr/local/bin/R
新装的R
$ alias R4.2.0=/home/admin/R-4.2.0/bin/R
运行R,然后安装Seurat
> install.packages("Seurat")
这一步要等好久,很多dependencies要安装
Warning messages:
1: In install.packages("Seurat") :
安装程序包‘RcppTOML’时退出狀態的值不是0
2: In install.packages("Seurat") :
安装程序包‘reticulate’时退出狀態的值不是0
3: In install.packages("Seurat") : 安装程序包‘leiden’时退出狀態的值不是0
4: In install.packages("Seurat") : 安装程序包‘Seurat’时退出狀態的值不是0
安装一个低版本的RcppTOML
> install.packages("devtools")
> require(devtools)
> install_version("RcppTOML", version = "0.1.3")
安装reticulate
> install.packages("reticulate")
再次尝试安装Seurat
> install.packages("Seurat") ;library("Seurat")
成功!
在安装 hdf5r 包的时候,提示需要 hdf5-devel >= 1.8.13,而目前CentOS 7 中 yum 只能安裝1.8.12版本,所以只能手动安装高版本的hdf5.
卸载yum安装旧版本后,从官网下载 hdf5-1.10.5安装
wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.5/src/hdf5-1.10.5.tar.gz
tar xvf hdf5-1.10.5.tar.gz
cd hdf5-1.10.5
./configure
make
make install
然后在 这和 这发现 hdf5r 的安装依赖 h5cc,因为是自己安装的 hdf5,所以需要手动指定 h5cc 路径
install.packages("hdf5r", configure.args="--with-hdf5=/home/moutian/hdf5-1.10.5/hdf5/bin/h5cc")
错误: package or namespace load failed for ‘hdf5r’ in dyn.load(file, DLLpath = DLLpath, ...):
无法载入共享目标对象‘/home/moutian/R/x86_64-pc-linux-gnu-library/4.2/hdf5r/libs/hdf5r.so’::
libhdf5_hl.so.100: 无法打开共享对象文件: 没有那个文件或目录
这表明加载包的时候不能识别 hdf5 的动态库,实际包已经安装好了,只是不能加载 hdf5 动态库,需要手动配置 hdf5 动态库 libhdf5_hl.so.100
在R中运行
> dyn.load('/usr/local/hdf5/lib/libhdf5_hl.so.100')
> install.packages("hdf5r", configure.args="--with-hdf5=/home/moutian/hdf5-1.10.5/hdf5/bin/h5cc")
> library(hdf5r)
成功!
直接从install.packages安装DoubletFinder会需要更新RcppTOML版本,所以选择从GitHub安装
> remotes::install_github('chris-mcginnis-ucsf/DoubletFinder',update=F)
> library("DoubletFinder")
成功!