概要
MCMCを使用するにあたり、Windowsでrstanをインストールし実行したところ
Rcppによるコンパイルエラーが発生し、解決まで時間を要したので備忘録的に記します。
コンパイルが通らないというよくあるエラーでしたが、私の場合Rのパッケージがインストールされているフォルダがエラーの原因でした。
下記のフォルダに過去のRパッケージの残骸が残っており、これらのフォルダを消去しR、Rstudio、Rtoolsをそれぞれ再インストールすることでrstanが無事機能しました。
C:\Users\[username]\AppData\Local\R
C:\Users\[username]\AppData\Local\Rstudio
rstan実行時のエラー対応に関する記事は多数ありますが
このようなケースは自分が探した限りでは見つけられなかったので投稿しました。
以下では、エラー発生までの詳細を記載しています。
各種バージョン
rstanは以下の環境でインストールしました。
- Windows10, 64bit
- R-4.3.2
- RStudio-2023.12.0-369
- rstan-version 2.32.5 (Stan version 2.32.2)
- RTools43
エラー発生までの流れ
今回は、RStan Getting Started (Japanese)の手順に沿って実行していきました。
RやRstudioは既にインストール済みだったため省略しています。
ただし、上記のサイトでは下記の文言があるため自身が使用するソフトウェアのバージョンには注意してください。
Rのバージョンは4.2.0かそれ以降を強く推奨します。
RStudioのバージョン1.4.x以降の使用を強くオススメします。
1. Rtoolsのインストール
rstanを使用するにはC++コードをコンパイルできるようにする必要があるため、こちらからRtools(+4.3)をインストールしました。なお、下記の方法ではRから直接最新のRtoolsをインストールできます。
# Rtoolsのインストール
pkgbuild::has_build_tools(debug = TRUE)
2.rstanのインストール
手順通りrstanをインストールしていきます。
# もしすでにrstanをインストールしているならば次の行を実行してください
# remove.packages(c("StanHeaders", "rstan"))
# rstanの最新版をインストール
install.packages("rstan", repos = c("https://mc-stan.org/r-packages/", getOption("repos")))
3.rstanの実行とエラー
ここまで必要なパッケージが無事インストールされ、このままうまくいくかと思いましたが、下記のコードを実行後にエラーが発生します。
# rstanが機能するか確認
example(stan_model, package = "rstan", run.dontrun = TRUE)
エラー内容
下記がエラー内容になります。調べてみるとどうやらc++で書かれたファイルのコンパイルがうまくいっていない模様。エラーへの対処はRとStanではじめる ベイズ統計モデリングによるデータ分析入門 サポートページを参考にさせて頂きました。多くのケースはこちらで対応できるのではないでしょうか。
Compilation ERROR, function(s)/method(s) not created!
compileCode(f, code, language = language, verbose = verbose) でエラー:
using C++ compiler: 'G__~1.EXE (GCC) 12.3.0'using C++17In file included from C:/Users/[username]/AppData/Local/R/win-library/4.3/Rcpp/include/RcppCommon.h:30,
~ 以下略
ということで、まずはWindowsのPATHに下記の設定を追加し、
Rtoolsのpathの不備によるエラーが起きている可能性を潰します。
一旦これで先程のコードを実行してみました。
# Windowsでのpath設定に追加
C:\RBuildTools\3.5\bin
C:\RBuildTools\3.5\mingw_64\bin
# Rでの実行コード
example(stan_model, package = "rstan", run.dontrun = TRUE)
# 実行結果
Compilation ERROR, function(s)/method(s) not created!
compileCode(f, code, language = language, verbose = verbose) でエラー:
~ 以下略
またも同じエラーが返ってきたためpathの問題ではないと判断しました。
次に試したのは、R, Rstudio,Rtoolsのアンインストールです。関連ファイルも削除(したつもりでいました)しました。ソフトウェアに関してはシステムからアンインストールし、関連ファイルは「C:\Program Files」以下に格納してあったので、それらを削除しました。
その後、ソフトウェアの再インストール~上記の1~3の手順を実行しましたがうまくいかず・・・
ここから沼にはまってしまい、
RやRtoolsのバージョンを変えながら上記の1~3の手順を繰り返したりしていました。
そして解決へ
ここで、削除できていないフォルダがあることに気づきます。
パッケージのインストール先がデフォルトの「C:\Users\[username]\AppData\Local\R~」になっていることに気づきました。過去にインストールしたパッケージのバージョンが競合している可能性も考慮し、フォルダごと削除しました。※一応バックアップは取っています。
フォルダ削除後、再度Rのインストール~トライしました。
実行結果
# Rでの実行コード
example(stan_model, package = "rstan", run.dontrun = TRUE)
# 実行結果
SAMPLING FOR MODEL 'anon_model' NOW (CHAIN 1).
Chain 1:
Chain 1: Gradient evaluation took 3.6e-05 seconds
Chain 1: 1000 transitions using 10 leapfrog steps per transition would take 0.36 seconds.
Chain 1: Adjust your expectations accordingly!
-- 省略 --
Chain 4: Elapsed Time: 0.013 seconds (Warm-up)
Chain 4: 0.009 seconds (Sampling)
Chain 4: 0.022 seconds (Total)
無事通ったようです。
灯台下暗しとは言いますが、今後同じような問題に直面された方のお役に立てば幸いです。