Skip to content

R 语言环境配置指南(macOS)

haohao edited this page Sep 29, 2020 · 3 revisions

这份指南适用于希望使用 rMVP 软件包但不太了解 R 语言的 Mac 用户。如果要使用 rMVP 软件包您需要安装以下几个软件:

  1. 一个 R 语言解释器,也就是 R 的本体,我们强烈推荐使用更快且开源免费的 Microsoft R Open。下载
  2. Clang for Mac 一个用于在 macOS 平台编译包含 C++ 代码的 R Package 的编译器。下载
  3. Rstudio 一个友好的 R 语言的集成开发环境,(可选)。下载

推荐方式

访问项目 https://github.com/rmacoslib/r-macos-rtools 从 release 页面下载一键配置工具,双击运行。

常见的错误

1.1 Clang 未能正确安装

fatal error: 'omp.h' file not found

或者是

unsupported option '-fopenmp

rMVP 中使用了多线程库 OpenMP,但是 macOS 自带的 Clang 编译器并不支持 OpenMP,对于这个问题,R 的官方提供了支持 OpenMP 的 Clang。

解决方案: 下载对应版本的 Clang (https://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/macosx/tools/)

1.2 Missing Headers

/usr/local/clang4/bin/../include/c++/v1/math.h:301:15: fatal error: 'math.h'
      file not found
#include_next <math.h>
1 error generated.
make: *** [RcppExports.o] Error 1
ERROR: compilation failed for package 'rMVP'

提示无法找到一些标准库中的头文件,比如 math.h ,这是由于 macOS 升级到 10.14 之后带来的不兼容的问题。目前可以通过安装 CommandLineTools 并且手工安装这些 Header 来解决这个问题。

解决方案:

  1. 安装 CommandLineTools for macOS
  2. 手工安装 Headers
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

2. 使用 install.packages 安装时镜像源配置不正确

> install.packages("rMVP")
Warning: unable to access index for repository https://mran.microsoft.com/snapsh ot/2018-08-01/src/contrib: 
  cannot open URL 'https://mran.microsoft.com/snapshot/2018-08-01/src/contrib/PACKAGES'
Warning message: package 'rMVP' is not available (for R version 3.5.1)

rMVP 在 2019-08-30 提交到 CRAN,如果您使用的是 Microsoft R Open ,其默认下载源可能是 MRAN 对 CRAN 的早期版本的镜像。

解决方案:重新设置镜像源(这个配置会在重启 R 恢复原状)

> options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))

3. 使用 devtools 安装时 ssl 未被正确配置

> devtools::install_github('xiaoleiLiubio/[email protected]')
Installation Failed: error setting certificate verify locations:
  CAfile: microsoft-r-cacert.pem
  CApath: none

在使用 devtools 从 Github 进行安装时,如果 SSL 没有被正确配置会出现证书的错误。

解决方案:可以输入以下命令临时取消掉对 SSL 证书的校验(这个配置会在重启 R 恢复原状)

library(httr)
set_config(config(ssl_verifypeer = 0L))

在 R 4.0 以上的版本启用 OpenMP

OpenMP 是一个流行的多线程并行框架,在 R 4.0 中如果您采用官方指南配置编译环境的话将无法启用 OpenMP。
启用 OpenMP 需要做两件事情:1. 额外安装一个支持 OpenMP 的 Clang 编译器;2. 在用户配置文件中添加新编译器以及 OpenMP 相关的变量声明。

# 安装 llvm (clang 是 llvm 的一部分)
brew install llvm

# 创建并编辑配置文件
mkdir -p ~/.R

cat << 'EOF' >> ~/.R/Makevars
CC=/usr/local/opt/llvm/bin/clang
CXX=/usr/local/opt/llvm/bin/clang++
CXX11=/usr/local/opt/llvm/bin/clang++
CXX14=/usr/local/opt/llvm/bin/clang++
CXX17=/usr/local/opt/llvm/bin/clang++
CXX1X=/usr/local/opt/llvm/bin/clang++
LDFLAGS=-L/usr/local/opt/llvm/lib
CXXFLAGS=-I/usr/local/opt/llvm/include
SHLIB_OPENMP_CFLAGS=-fopenmp
SHLIB_OPENMP_CXXFLAGS=-fopenmp
SHLIB_OPENMP_FFLAGS=-fopenmp
SHLIB_OPENMP_FCFLAGS=-fopenmp
EOF