[Docker] datascience-notebookを使うときのR packageのインストール方法の注意点

この記事を書くことにした背景には,Dockerでdatascience-notebookのimageを利用したRの解析をしようと思ったとき,
・通常のinstall.packagesの手法だとダウンロードにやたら時間が掛かる.
・cmakeエラー, “udunits2.h not found”, compile errorなどc言語が関わってくるR packageのエラーで躓いた.
ということに遭遇したことからである.

結論としては,Dockerのdatascience-notebookを使う際は,condaを使ってパッケージのインストールをすると時短かつcompileの部分で躓くことが少なくなる.

R用のDocker image

R用のDocker imageは,Rocker projectの一ページにまとめられている用に,Rocker, Jupyterの公式イメージ,b-data, r-hub, RStudio R Docker Imagesなどがある.

この中でJupyterの公式docker imageには,Jupyterlabの環境を使うことが出来,その上,Julia, Python, Rの3点が詰め込まれたdatascience-notebookというimageがある.僕はJulia, Python, Rを用いるので出来ればこのImageをベースに環境構築をしたいというのがモチベーション.

Datascience-notebook環境を立ち上げようとやたら時間が掛かったことと,パッケージのインストールの際に以下のようなエラーに出会い,なかなか解決出来なかったことに苛立った.
・udunits2 configure: error: C compiler cannot create executables
・Error: udunits2.h not found
・E: Unable to locate package cmake

Rのパッケージインストールをエラーを避け,インストールを早くする方法

condaでインストールする.

Anacondaは CRAN packagesの多くをビルドした状態で置いている.R language packages for Anaconda参照.そのため,Anacondaのpackage repositoryから,Rのパッケージ名を探して指定されてある方法でインストールを行う.Anaconda内には,Rのパッケージとして区別されているものと,conda-forgeとして区別されているものがある.また,Rのパッケージ名の接頭語として”r-“が付くことが多い.例えば,ggplot2を入れる場合は以下の2通り.

conda install -c r r-ggplot2 -y 
conda install -c conda-forge r-ggplot2 -y

そのため,Dockerfileに書き込む形式としては,以下のようになる.

RUN conda install -c r r-ggplot2 -y 
RUN conda install -c conda-forge r-ggplot2 -y

不便な点としてはCRANの全てのpackagesがサポートされているわけではないので,パッケージがrepositoryに無い場合,かつ,依存パッケージがinstall.packagesで上手くいかない場合には,依存パッケージをcondaでインストールしていく必要があるということだ.

例えば,”pubh” package (Anaconda repositoryには存在しない)をインストールしようとすると,install.package経由でインストール必要がある.しかし,epiR, gtsummary, udunits2のそれぞれがinstall.pacakgesでエラーが生じるので,別途conda installのコマンドを書いてインストールする必要がある.

ちなみに,なぜpackageのインストールが上手く行かないかというと,datascience-notebookのimageではパッケージなどがcondaによって管理されている.condaは独自のgccを用いてcompileを行うため,linux環境にあるgccとconda環境にあるgccが上手くマッチしないことが原因でエラーが起きる.また,conda内ではc言語のメタ情報が欠けているため上手くc言語のファイルが参照出来ないことが起きるためである.

ちなみに,datascience-notebookのimageではなく,rockerのimageなどを使う場合は,install2.rを用いると効率的にRのpackageのインストールが可能.以下の記事などを参照のこと.
rocker で使える便利コマンド install2.r とその仲間たち powered by littler

Raw binaryを直接いれる.

Rのpackageのinstallが遅い理由としては,CRANに上がっているコードをいちいちlocalのPC/Docker内でcompileする必要があるから.そのため,compileが終わっているファイルを直接取ってくれば早くなるよね,という話.

最近では,posit Package ManagerがLinux用のbinariesを用意しておいてくれているこので,以下の用に書くと若干早くなる.

install.packages("ggplot2", repos='https://packagemanager.rstudio.com/all/__linux__/focal/latest')

上記内容は以下の記事を参照のこと.
Installing Packages Takes A Very Long Time on Ubuntu

以上.

———-雑感(`・ω・´)———-
余談だが,datascience-notebookでは,sudoコマンドがdefaultでは使えないため,最悪,docker-composeなどで,GRANT_SUDO=yes と指定して,container立ち上げを行ってからsudoコマンドを使用しパッケージをインストールしていくことは避難経路として知っておくべきだろう.
GRANT_SUDOを指定する際のDocker, docker-composeの設定に関しては,[Python] Dockerでpygraphvizをインストールする を参照のこと.

コメント

タイトルとURLをコピーしました