niszetの日記

10年目エンジニアが最近勉強したことを忘れないようにメモをする

(R/RP3) ラズベリーパイにRを入れる…(ちょっと加筆修正)

Rからpythonを呼び、pythonでGPIOを叩いてLチカするまでの長い道のりの一歩目

pythonからGPIOを経由して、外部のセンサやLEDをいじることが出来ましたので、今度はRでやっていこうと思います。

とはいえ、RむけのGPIOライブラリはおそらくなく、そもそもデフォルトの状態でR入っていないのでまずはRを導入するところから。

apt-getで楽する場合

こちらを参考にしました。

www.limemo.net

以下のコマンドを実行するだけです

sudo apt-get install r-base

ただし、この記事と同じ、R3.1.1が入ります。古っ。 とりあえず起動して

mean(1:10)

でちゃんと計算されることくらいにチェックは留め、R3.4.1を入れることにしました。

/etc/apt/source.listを見ると、mirrordirector.raspbian.orgとかになっていて、バイナリで得る方法は期待できないなということで。

ソースからビルドして頑張る場合

こちらから、欲しいバージョンを選んで落としてきます。 Index of /src/base/R-3

やることはこちらの、「Linuxでソースからのビルド」のような感じです。 www.okadajp.org

今回はこんな感じ。作業ディレクトリは適当に~/work/にして、ダウンロードしています。

wget https://cran.r-project.org/src/base/R-3/R-3.4.1.tar.gz

tar xvfz R-3.4.1.tar.gz

これで~/work/R-3.4.1/に解凍したファイルが出てくるので、

mv R-3.4.1
./configure
make
sudo make install

で入れました。configureは./configureにしないとデフォルト環境では実行されませんね。

configureでコケる

…が、configureで一度こけました。Rのcurlパッケージがlibcurlを要求していて、それが入っていないことが原因ぽい。

こちらで、 CRAN - Package curl

SystemRequirements:  libcurl: libcurl-devel (rpm) or libcurl4-openssl-dev (deb).

の記述からlibcurl4-openssl-devが必要と判断。

sudo apt-get install libcurl4-openssl-dev

で入れたらconfigureはパスしました。
これ以外にもパッケージごとに外部のライブラリに依存しているものがあるはずで、大体は検索すればどのパッケージかはわかるはずです。今回も検索したら一番上にcranのページが来た

今回、それっぽいライブラリは

apt-cache search ^libcurl

の方法でもみたのですが、多過ぎ…。ちゃんと確認した方が良いと思いまする。

今回、これを試す前に結構apt-getで入れているので、素のraspbian+Rだとあれもこれも入れろと言われると思います。頑張りましょう。

入れたものは、前回の記事、 niszet.hatenablog.com

のリンク先の、

Raspberry PiでのPython 3.5環境構築 | MUDAなことをしよう。

に書いてあるものからいくつかと、あといくつか…いずれ追加します。

それでもconfigureでwarningが出る

今回は無視してすっ飛ばしましたが、htmlとかpdfとかbuild出来ないよ、というwarningが出ます。

こちらに記事があったのですが

stackoverflow.com

…試していません。 texは結構ファイルサイズ的に重いのと、おそらくこっちで開発あまりしないので…。

いずれ、試したらどこかで書きます。

makeは時間がかかる

約1時間かかりました。のんびりお茶でも飲むか、寝る前にしかけて朝結果を見るとか。

と思っていたら、こんなお言葉をいただく。ありがたや…

わぁしまった、思いつかなかった…。
ちゃんと動くかどうかも含めて試してみようと思います。

make installはsudoで

まぁこれはいいか。

PATHを設定しないと、デフォルトでは/usr/local/bin/R 下に入るのでターミナル上でRと打っても実行されません。

パスの追加はこちらを参考に。 パスを追加したい〜.bashrc編〜 - ITmedia エンタープライズ

私の環境だとapt-getで入れたRがそのまま残っているので、~/.bashrcのPATHを

export PATH="/usr/local/lib/R/bin/R:$PATH"

に書き換え(先に自分が入れたRが見える)て、R –versionで3.4.1になることを確認、

mean(1:10)

でちゃんと計算されることも確認してとりあえずR3.4.1 on Raspberry Pi 3 の達成です。お疲れ様でした。

終わりに

どんどん答えから遠ざかっているような気が若干していますが、まぁいずれたどり着くと信じて進めていくのです。
次回はRからPythonを呼びますよ…

とりあえず、動きはしたもののこの辺りは苦手…。
間違いとかもっと良い方法とか、あれば教えてください…