R 安装及使用
R 语言是一种自由软件编程语言与操作环境,主要用于统计分析、绘图以及数据挖掘。R由新西兰奥克兰大学的统计学家罗斯·伊哈卡和罗伯特·杰特曼开发,现在由R 核心小组负责开发,同时也有其他用户编写了诸多外挂的软件包。R 以 S 语言为基础,其词法作用域语义来自 Scheme。R的后台程序大多由C语言、FORTRAN语言和R自己写成。
本教程将介绍如何在 SonmiHPC 集群系统上安装 R 环境,并提供给集群上用户使用。
安装方式
R 的安装有多种方式,主要有下面的几种:
- 使用 YUM/DNF 系统自带的包管理器进行安装;
- 使用 Anaconda/Miniconda 等虚拟环境管理软件来安装;
- 直接从 R 源码从头编译安装。
下面分别介绍这三种安装方式,在集群上面主要推荐第2和第3种方法。
1. 使用包管理器安装
使用有 sudo 权限的用户或者 root 用户,执行下面的命令进行安装:
shell
dnf --enablerepo=crb install -y flexiblas-devel libtirpc-devel
dnf install -y epel-release
dnf install -y R
dnf --enablerepo=crb install -y flexiblas-devel libtirpc-devel
dnf install -y epel-release
dnf install -y R
不过该方法只能在当前的节点中进行安装的,其他计算节点没有执行以上命令的不会自动进行安装,因此不推荐该方式。
2. 使用 conda 安装 R 虚拟环境
在集群已经安装了 Anaconda 或者 Miniconda 的前提下,可以使用下面的命令来安装 R 环境。
shell
conda create -n r_env r-essentials r-base
conda create -n r_env r-essentials r-base
安装完成后激活环境即可:
shell
conda activate r_env
conda activate r_env
3. 直接从源码编译安装
该方法比较适合集群上面使用,因此也推荐该方式。
- 执行下面的命令,安装必要的依赖:
shell
dnf install -y gcc gcc-gfortran gcc-c++ zlib zlib-devel bzip2 bzip2-devel xz xz-devel pcre2 pcre2-devel libcurl libcurl-devel readline readline-devel java-11-openjdk-headless
dnf install -y gcc gcc-gfortran gcc-c++ zlib zlib-devel bzip2 bzip2-devel xz xz-devel pcre2 pcre2-devel libcurl libcurl-devel readline readline-devel java-11-openjdk-headless
- 下载最新的 4.4.1 版本的源码压缩包,并解压缩:
shell
wget https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/base/R-4/R-4.4.1.tar.gz --no-check-certificate
tar xzvf R-4.4.1.tar.gz
cd R-4.4.1
tools/rsync-recommended
wget https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/base/R-4/R-4.4.1.tar.gz --no-check-certificate
tar xzvf R-4.4.1.tar.gz
cd R-4.4.1
tools/rsync-recommended
- 编译 R:
假如处在conda的虚拟环境中,请先退出所有虚拟环境:
conda deactivate
conda deactivate
再执行下面命令进行安装:
./configure --prefix=/share/apps/R/4.4.1 --with-x=no --enable-R-shlib
make && make install
./configure --prefix=/share/apps/R/4.4.1 --with-x=no --enable-R-shlib
make && make install
- 为方便集群内其他用户使用,修改安装路径权限:
shell
chmod -R 755 /share/apps/R/4.4.1
chmod -R 755 /share/apps/R/4.4.1
- Modulefile 文件编写
编译好的 R 环境可以通过 Module 模块的方式提供给集群上其他用户使用,创建下面的路径:
shell
mkdir -p /share/apps/modulefiles/R
mkdir -p /share/apps/modulefiles/R
在该路径下创建一个新的文件:
shell
cd /share/apps/modulefiles/R && vim 4.4.1
cd /share/apps/modulefiles/R && vim 4.4.1
新增文件内容如下:
#%Module###########################################
set modulefilename "R"
set modulefilever "4.4.1"
set min_tcl_ver 8.4
if { $tcl_version < $min_tcl_ver } {
puts stderr " "
puts stderr "ERROR: This modulefile requires tcl $min_tcl_ver or greater."
puts stderr "Your system reports that tclsh version $tcl_version is installed."
exit 1
}
if { [ module-info mode load ] } {
puts stderr "Loading $modulefilename version $modulefilever"
}
if { [ module-info mode ] == "unload" || [ module-info mode ] == "remove" } {
puts stderr "Removing $modulefilename version $modulefilever"
puts stderr "Use to view any remaining dependent modules."
}
prepend-path PATH /share/apps/R/4.4.1/bin
prepend-path PKG_CONFIG_PATH /share/apps/R/4.4.1/lib64/pkgconfig
prepend-path MANPATH /share/apps/R/4.4.1/share/man
#%Module###########################################
set modulefilename "R"
set modulefilever "4.4.1"
set min_tcl_ver 8.4
if { $tcl_version < $min_tcl_ver } {
puts stderr " "
puts stderr "ERROR: This modulefile requires tcl $min_tcl_ver or greater."
puts stderr "Your system reports that tclsh version $tcl_version is installed."
exit 1
}
if { [ module-info mode load ] } {
puts stderr "Loading $modulefilename version $modulefilever"
}
if { [ module-info mode ] == "unload" || [ module-info mode ] == "remove" } {
puts stderr "Removing $modulefilename version $modulefilever"
puts stderr "Use to view any remaining dependent modules."
}
prepend-path PATH /share/apps/R/4.4.1/bin
prepend-path PKG_CONFIG_PATH /share/apps/R/4.4.1/lib64/pkgconfig
prepend-path MANPATH /share/apps/R/4.4.1/share/man
保存后,设置一下权限:
shell
chmod -R 755 /share/apps/modulefiles
chmod -R 755 /share/apps/modulefiles
- 集群上面用户可以通过下面的命令来查看该模块:
[root@sonmi R]# module avail
-------------------- /share/apps/modulefiles --------------------
R/4.4.1
[root@sonmi R]# module avail
-------------------- /share/apps/modulefiles --------------------
R/4.4.1
- 用户可以通过执行下面的命令来加载该模块:
shell
module load R/4.4.1
module load R/4.4.1