跳转至

R

集群R 使用

Warning

集群上R最新的主线版本为 R/4.0.0,此版本内安装了大量可用R包,如代码或R包无较高R版本需求,建议优先使用此版本。

集群上安装了多个版本的R,3.3, 3.6, 4.0, 4.2等,可使用module av R 查看。用户可以根据需要,通过module load 命令调用需要的R。

module load R/4.0.0

R/4.0.0 中,安装了许多常用的R包,部分R包安装运行时会依赖高版本GCC、库文件等,具体见本文后面的表格,使用这些R包需要先载入对应的软件。

对于集群中没有安装的R包,用户可以在自己的账号中安装。调用集群中的R安装R包时候,R包会装在默认位置~/R/x86_64-pc-linux-gnu-library/x.x 目录中,如使用R/4.0.0 ,R包默认安装目录为 ~/R/x86_64-pc-linux-gnu-library/4.0

各种R包安装方式见 R包安装

如果不是安装在默认位置,可以在~/.bashrc 目录内写入R_LIBS变量来指定R包安装的位置以方便调用。

export R_LIBS=~/R_libs

Rstudio

为方便画图等,可以调用集群中安装的Rstudio,具体见RStudio

Rstudio运行在计算节点,由于计算节点没有联网,因此不能直接安装R包。处理方式为:

在登录节点上,使用集群公共R R/4.2.0 安装R包到指定目录,然后在Rstudio中使用安装的这个包。

$ module load R/4.2.0
# 确保 ~/R/rstudio/4.2/ 目录存在,否则自行创建
$ R

# install.packages包安装,使用lib参数指定安装位置
$ > install.packages("ggplot2", lib="~/R/rstudio/4.2/")

# Bioconductor包安装
# 先指定安装位置,然后再安装
$ > .libPaths(c("~/R/rstudio/4.2/", .libPaths()))
$ > BiocManager::install("methylKit")

R 依赖库

R包 集群R版本 依赖库
LPmerge 4.0.0 module load glpk/5.0
raster 4.0.0 module load GDAL/3.1.0 SQLite/3.23.1 PROJ/6.3.2 GEOS/3.7.1
xcms 4.0.0 module load netCDF/4.5.0 Szip/2.1.1
scFunctions 4.0.0 module load GEOS/3.7.1 GCC/5.4.0-2.26
Seurat(4.3.0) 4.0.0 module load GEOS/3.7.1 GCC/5.4.0-2.26 libpng/1.6.24
Seurat(5.0.1) 4.2.0 module load GEOS/3.7.1 GCC/7.2.0-2.29 libpng/1.6.24 glpk/5.0
SimBu 4.0.0 module load GCC/5.4.0-2.26
RNetCDF 3.6.0 module load netCDF/4.7.4
Nebulosa 4.0.0 module load GEOS/3.7.1 GCC/5.4.0-2.26
BioEnricher 4.3.2 module load GCC/7.2.0-2.29 libpng/1.6.24
MEGENA 4.2.0 module load GCC/7.2.0-2.29 glpk/5.0
devtools 4.2.0/4.3.2 module load GCC/9.4.0
monocle3 4.2.0 module load GCC/7.2.0-2.29 glpk/5.0 PROJ/6.3.2 GDAL/3.1.0 GEOS/3.7.1
DESeq2 4.2.0 module load GCC/5.4.0-2.26 libpng/1.6.24 glpk/5.0

其它库缺失可以加载对应的库,见 常用库缺失解决办法

'GLIBC_x.xx' not found 报错解决办法,见 'GLIBC_x.xx' not found

R 源码编译及部分复杂包安装

4.2.0

devtools

$ module load R/4.2.0 GCC/9.4.0 freetype/2.6.5 harfbuzz/1.7.5 fribidi/1.0.13 
$ Rscript -e 'install.packages(c("devtools"), repos="http://cran.us.r-project.org")'

scRNA 镜像

scRNA-seq.Dockerfile

https://rocker-project.org/

igraph

安装 igraph_2.0.3 时报错,error: ‘isnan’ is already declared in this scope using std::isnan;,可以有三种解决方案:

  • 方案1

    安装低版本的 igraph,测试安装 1.6.0 可行。

  • 方案2

    使用 GCC 7module load GCC/7.2.0-2.29

  • 方案3

    更改源码,同时也要加载 GCC 5module load GCC/5.4.0-2.26。下载源码包,解压,找到这2个源码文件src/vendor/cigraph/src/community/infomap/infomap.ccsrc/vendor/cigraph/src/community/walktrap/walktrap.cpp,将其中的 using std::isnan; 给注释掉,然后再打包,再使用该源码包安装 R CMD INSTALL igraph_2.0.3.1.tar.gz

ggtree

ggtree 安装过程中报错 object 'rect_to_poly' not found,根据作者的说法是 rect_to_polygeom_hilight 中有使用,但这个函数有问题,然后在 ggplot2 中被移除了,导致这个报错。作者给的临时解决办法是根据 ggplot2 中新的实现,在 ggtree 中自己实现 rect_to_poly 这个函数,具体见 copy rect_to_poly, #601 。解决办法作者在这里说得不是很详细,翻源码看了一下,做了一番测试,解决方法如下:

下载 ggtree 源码,这里使用的 ggtree_3.6.2.tar.gz,解压,将 R/geom_hilight.R 中第 486 行代码注释,然后添加新的 rect_to_poly 实现,如下所示。

R/geom_hilight.R
# rect_to_poly <- getFromNamespace("rect_to_poly", "ggplot2")
rect_to_poly <- function(xmin, xmax, ymin, ymax) {
  data_frame0(
    y = c(ymax, ymax, ymin, ymin, ymax),
    x = c(xmin, xmax, xmax, xmin, xmin)
  )
}
之后再重新打包安装。
$ tar -czvf ggtree_3.6.2.1.tar.gz ggtree
$ R CMD INSTALL ggtree_3.6.2.1.tar.gz 

R 4.3.2

R 编译安装

在交互节点安装

$ wget https://mirror.nju.edu.cn/CRAN/src/base/R-4/R-4.3.2.tar.gz
$ tar xf R-4.3.2.tar.gz
$ cd R-4.3.2
$ module load  PCRE/10.00
$ ./configure --enable-R-shlib --with-x --with-cairo --prefix=/DIR/
$ make -j12 
$ make install

devtools

$ module load R/4.3.2 GCC/9.4.0 freetype/2.6.5 harfbuzz/1.7.5 fribidi/1.0.13 git/2.17.0
$ Rscript -e 'install.packages(c("devtools"), repos="http://cran.us.r-project.org")'

部分错误解决

  • C++17 standard requested but CXX17 is not defined

    安装R包的过程中出现报错 C++17 standard requested but CXX17 is not defined,解决办法为加载高版本GCC,然后设置R相关环境变量。

    $ module load GCC/7.2.0-2.29
    $ mkdir -p ~/.R
    $ echo 'CXX17 = g++ -std=c++17 -fPIC' >> ~/.R/Makevars
    

  • address 0x20, cause 'memory not mapped' R包安装或运行过程中,出现如下报错

    *** caught segfault ***
    address 0x20, cause 'memory not mapped'
    
    可以通过重新安装Rcpp解决
    $ >remove.packeages('Rcpp')
    $ >install.packages('Rcpp')
    

本文阅读量  次
本站总访问量  次