Stan楽しんでますか。
僕も楽しもうと思ってrstan2.10.1を入れたんですが,動かない・・・
山大の小杉さんのブログを見ていて,「Winヤバイんだろうな・・・大丈夫かな・・・」と思っていたら,案の定ハマりました。今はだいたい見当つきましたが,根本的な原因はよくわかりません。対処法だけお伝えしておきます。
まず,Rのバージョンによってもどうも反応が違うのと,Windowsの設定によっても多分違います。なのでこういうエラーが出たらこうする,という対処しかかけません。PCそれほど強くなくて・・・
この記事の前提
・Windows7,64bit
・rstan2.10.1がインストールできている
RとRtoolsのバージョン
Rは2016年7月18日現在,3.3.1が最新です。これに対応するRtoolsのバージョンは34ですが,rstanは34に上手く対応してません。一応エラー回避策もあるようですが,面倒ならR3.2.5で,Rtools33でやるほうがうまくいくっぽいです。RstudioならToolsのGlobal optionから,前のバージョンのRを起動することができます。
一応,3.3.1+Rtools33でも動きます。でもなんか警告がめっちゃでたりする(これもバージョンとかWinの設定によるのかも)ので,僕はRのバージョンを下げました。
また,Rtools34でもインストール場所を指定することで動くようにもなるそうです。@berobero11さんに教わりました。
@simizu706 @kosugitti Rtools34でもいいですか?Rtools34のインストールの場所はデフォルト(C:\Rtools)ならインストール途中のPATHの追加を選んで、2行目のC:\Rtools\mingw_64\binに変更します。
— Matsuura Kentaro (@berobero11) 2016年7月15日
コンパイルが上手くいっているかを確認
rstanのページに次のコードが走ればC++のコンパイル自体は上手くいってるよ,とのこと。
1 2 3 |
fx <- inline::cxxfunction( signature(x = "integer", y = "numeric" ) , ' return ScalarReal( INTEGER(x)[0] * REAL(y)[0] ) ; ' ) fx( 2L, 5 ) # should be 10 |
これで10が出力されたらOK!
10が出ない場合はエラーを見ていく。
エラーパターン1
g++.exe: error: Files/R/R-3.2.2/library/StanHeaders/libs/x64: No such file or directory
原因はわからないけど,パスにスペースが入ってる(Program Filesの間のスペース)ことが悪さしているよう。というわけで,Rを新しくインストールし,そのときにCの直下に(つまりC:\Rに)インストールしましょう。そうすれば,パスにスペースが入らない。
でもこれ,どのPCでも出るエラーじゃないみたいで,謎です。Winの設定の違いなのか・・・ 環境変数のPATHはどっちのPCでも同じにしてあるので,そこは関係ないみたいです。
エラーパターン2
cc1plus.exe: error: unrecognized command line option '-ffat-lto-objects'
これは,Makevarsというファイルがどうも悪さをしているらしい。ユーザーの中のマイドキュメントに.Rというフォルダがあって,そこにMakevarsというファイルがあると思うので,そのファイル名を適当に変える(つまり,アクセスできなくする)。それでも動くらしいので,それで解決。
この件は,Twitterで教えてもらいました。感謝です。
@simizu706 失礼します。同エラーに当たりました。32bit版Rは,下記エラー報告内https://t.co/p9i0C9TT4p
のBenさんの返信内容に従いMakevarsファイル(ファイルの場所も上記リンク内にあります)を編集することで解決いたしました。— せう (@shikataaki) 2016年7月17日
@simizu706 64bit版Rはそれでも失敗するので,Makevarsファイル名の頭に0をつけ,そもそも読み込ませないようにすることで解決いたしました。こちらは32bit版Rでも通用します。差し当たり問題は起きていませんが,今後ファイルがないことの影響はあるかもしれません。
— せう (@shikataaki) 2016年7月17日
無事解決
以上で,僕は無事rstan2.10.1が動くようになりました。上の二つのエラーは独立したもののようで,僕は両方対処しないとメインPCは動きませんでしたが,ノートPCのほうは同じWin7の64bitにも関わらず,両方ともエラーは出ませんでした。そもそも.RフォルダのMakevarsファイルがノートPCのほうには見当たらないので,別のところにあるのか,そもそも不要なのか,よくわかりません。Rtools34を一度インストールしたことが原因なのかもしれません。謎です。
それでも警告はでる
上記をクリアしても,警告は出ます。でも無視して大丈夫みたいです。
C:/R/R-3.2.5/library/StanHeaders/include/stan/math/rev/core/set_zero_all_adjoints.hpp:14:17: warning: 'void stan::math::set_zero_all_adjoints()' defined but not used [-Wunused-function]
いろいろお世話になった方々へに感謝しつつ,この記事が,今後苦しむかもしれない方への助けになりますように。