在 OpenSUSE Leap 中安装最新版的 R

在 Linux 发行版上使用 R 比在 Windows 上用可麻烦多了,不同发行版仓库内的 R 版本可能并不是最新版,在 CRAN 上下载下来的软件包也并不是 Binary 的包而是需要现编译的源代码。为了在你的发行版上使用最新版本的 R 需要做诸多工作,本文为笔者折腾了一上午留下来的总结,可供各位使用者参考以少绕弯路。

我在使用的发行版是 OpenSUSE Leap 42.3 其余发行版的配置方法应当大同小异,各位读者可以根据自己的情况适当改变命令。

安装最新版本的 R

OpenSUSE Leap 仓库里面的 R 并不是最新版的,在这种情况下你可能没有办法正常使用一些更新比较勤快的包,或者在加载包的时候看到警告,为了安装最新版本的 R,我们可以下载Tumbleweed 版本的一键安装文件执行安装,但是请注意在安装的时候不要订阅Tumbleweed的源(在安装界面中可以进行选择);否则在更新系统软件的时候会混入一些Tumbleweed源的软件,造成系统工作异常。

安装编译包所需要的依赖项

更新 gcc 与 g++

如果你从 CRAN 上下载需要编译的包,那么可能会遇到如下报错:

1
2
3
gcc gcc: error: unrecognized command line option ‘-fstack-clash-protection’
g++ g++: error: unrecognized command line option ‘-fstack-clash-protection’
gfortran gfortran: error: unrecognized command line option ‘-fstack-clash-protection’

这是由于随系统附带的 gccg++ 版本过低,大多数的软件包都没有办法被系统内置的 gcc 正常编译,所以我们需要安装比较新版本的编译器:

1
# zypper in gcc7 gcc7-c++ gcc7-c++ gcc7-fortran

警告:永远不要尝试直接升级系统自带的 gcc(如将4.8 更新到 gcc 4.9),直接更新如此底层的包将对系统造成不可预知的破坏。

修改 R 的编译配置

使用你喜欢的编辑器打开 R 的全局编译配置文件,比如:

1
# vim /usr/lib64/R/etc/Makeconf

将所有的 gcc 替换成 gcc-7,将所有的 g++ 替换成 g++-7,将所有的 gfortran 替换成 gfortran-7,具体需要替换的行如下:

1
2
3
4
5
6
7
8
CC = gcc-7
CXX = g++-7
CXX98 = g++-7
CXX11 = g++-7
CXX14 = g++-7
CXX17 = g++-7
FC = gfortran-7
F77 = gfortran-7

你也可以选择在用户文件夹下创建编译配置文件并直接写入上述内容:

1
$ vim  ~/.R/Makevars

这样做的好处是,你的操作不会影响到其他用户,但是在使用 su 执行 R 的时候你将依旧无法正常编译安装某些工具包。

安装一些其他的常用包

如果你的系统内没有安装某些常用包的话,很多 R 的软件包依旧是没有办法被安装的,比如在安装 tidyverse 的时候,我们还需要:

1
# zypper in libcurl-devel openssl-devel libxml2-devel

具体安装某一软件包需要的系统依赖会被详细的写在安装的报错信息中,举个例子:

1
2
3
4
5
6
7
8
9
10
------------------------- ANTICONF ERROR —-------------------------
Configuration failed because libcurl was not found. Try installing:
* deb: libcurl4-openssl-dev (Debian, Ubuntu, etc)
* rpm: libcurl-devel (Fedora, CentOS, RHEL)
* csw: libcurl_dev (Solaris)
If libcurl is already installed, check that 'pkg-config' is in your
PATH and PKG_CONFIG_PATH contains a libcurl.pc file. If pkg-config
is unavailable you can set INCLUDE_DIR and LIB_DIR manually via:
R CMD INSTALL —configure-vars='INCLUDE_DIR=... LIB_DIR=...'
—------------------------------------------------------------------

如果你在使用的是RH系的发行版(如Fedora, Red Hat, OpenSUSE),那么则需要安装 rpm 后面列出来的软件包。

以上是在发行版中安装配置 R 过程中可能遇到的部分问题,祝配置顺利 ヽ(●´∀`●)ノ