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 項)を行います。
- RStan Getting Started · stan-dev/rstan Wiki · GitHub
- Installing RStan from source on Windows · stan-dev/rstan Wiki · GitHub
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周りの問題かもしれません。