rstanやrstanarm等をWindows上でソースからインストールする時の設定

最近これに従って(Step by step guide for creating a package that depends on RStan • rstantools)RStanを使用するRのパッケージを作っていたのですが、どうもdevtools::install()devtools::build(binary = TRUE)などコンパイルを要するステップに入るとエラーが出てインストール出来ないという状況に陥りました。 いろいろ調べると、どうやらカスタムパッケージの問題ではなく、コンパイルの設定自体に問題があり、RStanやRStanArmもソースからインストール出来ないことが分かったので、対処法をメモしておきたいと思います。

ちなみに、コンピューターはWindows 7 or 10を使っているので、もしかしたらMac等では問題なく進むのかもしれません。

RStanのWikiに書かれているステップを実行する

まずは下の2つのページに書かれているステップに従い、(1) C++ Toolchainのインストールと(2) Makevarsファイルの設定(2つ目のページの Configuration 項)を行います。

g++のバージョンを確認する

通常は問題ないはずですが、僕の環境では他のプログラム用の古いバージョンのg++がPATH上で優先されてしまっていて、コンパイル時にエラーを起こしてしまっていました。
R上で以下のコードを打ち、バージョンが4.9以降だったら問題ありません。

system("g++ -v")

もしそうでない場合には、環境変数のPATHの頭に以下を追記します。

C:\Rtools\bin;C:\Rtools\mingw_64\bin;C:\Rtools\mingw_32\bin;

Makevar.winと.Rprofileを編集する

本当は最初のステップだけで上手く行くはずなのですが、僕の環境では上の手順を辿っても上手くいきませんでした。 *1 これを回避するために、Makevars.winと.Rprofileを編集する必要がありました。

Makevars.win

Makevars.winの位置はfile.path(Sys.getenv("HOME"), ".R")で、Windowsだと通常は C:/Users/USERNAME/Documents/.R/内にあります。 Makevars.win内の二行目のこれを

CXX14 = g++ -m$(WIN) -std=c++1y

以下のものに変更します。

CXX14 = $(BINPREF)g++ -m$(WIN) -std=c++1y

.Rprofile

.RprofileはSys.getenv("HOME")にあるはずですが、無ければ作成してください。上と同様に、Windowsだと通常は C:/Users/USERNAME/Documents/内に置かれます。 このファイル内に以下の行を追加してください。

Sys.setenv(BINPREF = "C:/RTools/mingw_$(WIN)/bin/")

*1:見たところ32ビット版のバイナリを作る時に64ビット版のg++を使ってしまっているようなので、PATH周りの問題かもしれません。