Steel-Dwassのpython実装がなーーい、Rならあるのに。。
という状況で、rpy2 というパッケージがあることがわかったので早速使おうとしてもがき苦しんだ戦いの記録です(言い過ぎ)
いれて動かしてみる。
Pythonからよく使うRの統計関数を簡単に呼び出せるようにしてみた (多重比較・Rpy2)という記事を参考にしました。Rpy2を知ったのもこちらです(感謝)
環境
Platform: x86_64-apple-darwin17.6.0 (64-bit)
Running under: macOS High Sierra 10.13.6
install
すでにrは既に入っている(その時のバージョン)
$ r --version
R version 3.3.3 (2017-03-06) -- "Another Canoe"
Copyright (C) 2017 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin16.4.0 (64-bit)
ので、以下の手順で、Rpy2を入れる
$ r
> install.packages("multcomp")
> install.packages("NSM3")
$ pip show rpy2
test
早速試す。
$ cat test_rpy2.py
import rpy2
print(rpy2.__version__)
from rpy2.rinterface import R_VERSION_BUILD
print(R_VERSION_BUILD)
$ python test_rpy2.py
Traceback (most recent call last):
File "test_rpy2.py", line 33, in <module>
from rpy2.rinterface import R_VERSION_BUILD
File "/Users/obara/.pyenv/versions/3.6.0/lib/python3.6/site-packages/rpy2/rinterface/__init__.py", line 51, in <module>
from rpy2.rinterface._rinterface import (baseenv,
ImportError: dlopen(/Users/obara/.pyenv/versions/3.6.0/lib/python3.6/site-packages/rpy2/rinterface/_rinterface.cpython-36m-darwin.so, 2): Library not loaded: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libR.dylib
Referenced from: /Users/obara/.pyenv/versions/3.6.0/lib/python3.6/site-packages/rpy2/rinterface/_rinterface.cpython-36m-darwin.so
Reason: Incompatible library version: _rinterface.cpython-36m-darwin.so requires version 3.5.0 or later, but libR.dylib provides version 3.3.0
エラーメッセージの通り、Rバージョンの不一致ということだったので、再度入れ直して試す
$ brew upgrade r
なんか両方入っているとおかしな動作になりそうだったので、結局一度rを削除して入れ直した。
* ちょー時間がかかる。。
$ r --version
R version 3.5.1 (2018-07-02) -- "Feather Spray"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin17.6.0 (64-bit)
$ python test_rpy2.py
2.9.4
Traceback (most recent call last):
File "test_rpy2.py", line 33, in <module>
from rpy2.rinterface import R_VERSION_BUILD
File "/Users/obara/.pyenv/versions/3.6.0/lib/python3.6/site-packages/rpy2/rinterface/__init__.py", line 51, in <module>
from rpy2.rinterface._rinterface import (baseenv,
ImportError: dlopen(/Users/obara/.pyenv/versions/3.6.0/lib/python3.6/site-packages/rpy2/rinterface/_rinterface.cpython-36m-darwin.so, 2): Library not loaded: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libomp.dylib
Referenced from: /Users/obara/.pyenv/versions/3.6.0/lib/python3.6/site-packages/rpy2/rinterface/_rinterface.cpython-36m-darwin.so
Reason: image not found
なんか動かないっす
調べてみる
/Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libomp.dylib
もちろん、このファイルが存在していないが、それどころか、R.frameworkすらどこにも無くなっている。。
ググってみると、この辺とか
再インストールとか、gccから入れ直せとか。。もちろん試してみました。(brew reinstall gcc r)
残念ながら、何をしても、R.frameworkが作成されません。
このPDF資料が結構新し目だったので、みてみると、sessionInfo()というR functionの結果を見ると、
BLAS: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib
上のようにR.frameworkにある模様。
で、コチラの環境では、
$ r
sessionInfo()
Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib
どっちもR.frameworkにない!
こちらの場合は、片方だけR.framework にある模様w ライブラリを入れる順番や方法で変わるのか、そもそもR.frameworkは誰が作るのかわからないまま、途方に暮れつつ、こちらのページに辿り着いた。
別のライブラリframeworkにも、libomp.dylibが存在することがみて取れる。 そう!そもそもR.frameworkにこだわる必要がなく、libomp.dylib そのものが個別に存在すればなんとかなるのではという認識が空から降ってきた。
終わりに向かって
[libomp.dylib mac]でググる。そして、こちら/githubを発見。
当該ページに記載の通りbrewでインストールして見る
$ brew install brew install CLIUtils/apple/libomp
$ python test_rpy2.py
2.9.4
('3', '5.0', '', 74626)
ふぅ(๑˃̵ᴗ˂̵)