なにこれ
RStanを勉強するために環境構築したい。どうせならDockerを使ってみる。
使うdockerイメージによって変わるのかもしれないが、RStanのインストールでエラーが出たので、ログを残す
環境
❯ docker --version Docker version 18.09.2, build 6247962 ❯ docker images REPOSITORY TAG IMAGE ID CREATED SIZE tokyor/rstudio latest c53aa47cd11b 16 months ago 1.89GB
DockerでR環境を構築する
下記コマンドを実行し、tokyor/rstudioイメージを元にして、環境を構築しました。
http://localhost:8787
にアクセスするとRStudioが開くと思います。
$ docker run -it -d --name rstudio -p 8787:8787 tokyor/rstudio
そして、RStudioのコンソールでrstanをインストールしようとしたのですが、 エラーでインストールできませんでした。。。
> install.packages('rstan', dependencies = TRUE) (略) g++ -I/usr/local/lib/R/include -DNDEBUG -I"../inst/include" -I"`"/usr/local/lib/R/bin/Rscript" --vanilla -e "cat(system.file('include', 'src', package = 'StanHeaders'))"`" -DBOOST_DISABLE_ASSERTS -DBOOST_PHOENIX_NO_VARIADIC_EXPRESSION -I"/usr/local/lib/R/site-library/Rcpp/include" -I"/usr/local/lib/R/site-library/RcppEigen/include" -I"/usr/local/lib/R/site-library/BH/include" -I"/usr/local/lib/R/site-library/StanHeaders/include" -I/usr/local/include -fpic -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g -c lang__grammars__statement_grammar_inst.cpp -o lang__grammars__statement_grammar_inst.o /usr/local/lib/R/etc/Makeconf:168: ターゲット 'lang__grammars__statement_grammar_inst.o' のレシピで失敗しました Warning in install.packages : installation of package ‘rstan’ had non-zero exit status Warning in install.packages : installation of package ‘shinystan’ had non-zero exit status
エラーの原因と解決策
コンパイルの設定にあるようで、以下のチュートリアルにある Configuration of the C++ Toolchain のコマンドによって、コンパイル時の設定ファイルを追加で作ってあげると解決しました。 RStan Getting Started · stan-dev/rstan Wiki · GitHub
# RStudioにて dotR <- file.path(Sys.getenv("HOME"), ".R") if (!file.exists(dotR)) dir.create(dotR) M <- file.path(dotR, ifelse(.Platform$OS.type == "windows", "Makevars.win", "Makevars")) if (!file.exists(M)) file.create(M) cat("\nCXX14FLAGS=-O3 -march=native -mtune=native", if( grepl("^darwin", R.version$os)) "CXX14FLAGS += -arch x86_64 -ftemplate-depth-256" else if (.Platform$OS.type == "windows") "CXX11FLAGS=-O3 -march=native -mtune=native" else "CXX14FLAGS += -fPIC", file = M, sep = "\n", append = TRUE)
解決策を恒常的に反映させたい
新しくコンテナを立ち上げるたびに変更を加えてRStanをインストールするのは面倒なので、Dockerfileを作成します。
$ cat setting.R dotR <- file.path(Sys.getenv("HOME"), ".R") if (!file.exists(dotR)) dir.create(dotR) M <- file.path(dotR, ifelse(.Platform$OS.type == "windows", "Makevars.win", "Makevars")) if (!file.exists(M)) file.create(M) cat("\nCXX14FLAGS=-O3 -march=native -mtune=native", if( grepl("^darwin", R.version$os)) "CXX14FLAGS += -arch x86_64 -ftemplate-depth-256" else if (.Platform$OS.type == "windows") "CXX11FLAGS=-O3 -march=native -mtune=native" else "CXX14FLAGS += -fPIC", file = M, sep = "\n", append = TRUE) install.packages('rstan')
$ cat Dockerfile FROM tokyor/rstudio WORKDIR /home/rstudio COPY setting.R . # R Compile setting RUN Rscript setting.R
$ docker build -t ${DOCKER_IMAGE_NAME} .
参考URL
rstan fails to install under Centos 7 · Issue #589 · stan-dev/rstan · GitHub