Palmsonntagmorgen

NGSデータを使った解析と、その周辺。

R in Anaconda にrJavaをインストール(8/15追記)

個人的につまったので忘備録。

anaconda は Linux (Ubuntu 16.04)上でpyenvを使ってインストールしているという前提です。

 $ conda create -c r r-irkernel # anaconda内にRのインストール

Rを起動してrJavaをインストールしようとするとエラーになる。

 > install.packages("rJava")

 ...
 gcc -std=gnu99 -o libjri.so Rengine.o jri.o Rcallbacks.o Rinit.o globals.o rjava.o  -shared -L/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server -ljvm -Wl,--export-dynamic -fopenmp  -L/home/rnakato/.pyenv/versions/anaconda3-4.4.0/lib/R/lib -lR -lpcre -llzma -lbz2 -lz -lrt -ldl -lm -liconv -licuuc -licui18n
 /usr/bin/ld: -liconv が見つかりません
 collect2: error: ld returned 1 exit status
 Makefile.all:38: ターゲット 'libjri.so' のレシピで失敗しました

-liconv を認識できずに色々苦労していたのだが、実はrJavaもcondaでインストールできることに気づいた。

 $ conda install -c r r-rjava

だがRを起動してrJavaをロードすると libjvm.so がないという理由でエラーになる。

 > library("rJava")
 Error :  .onLoad は loadNamespace()('rJava' に対する)の中で失敗しました、詳細は:
  call: dyn.load(file, DLLpath = DLLpath, ...)
  error:  共有ライブラリ '/home/rnakato/.pyenv/versions/anaconda3-4.4.0/lib/R/library/rJava/libs/rJava.so' を読み込めません:
  libjvm.so: 共有オブジェクトファイルを開けません: そのようなファイルやディレクトリはありません
 エラー:  ‘rJava’ に対するパッケージもしくは名前空間のロードが失敗しました

手元の環境ではlibjvm.soは/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/amd64/server にあるので、LD_LIBRARY_PATH を通す。

 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/amd64/server 

これでrJavaをロードできるようになりました。

なお、R CMD javareconf を使う方法は手元の環境ではうまくいきませんでした。

8/15 追記

conda install -c r r-rjava でrJavaをインストールしても、 R内でinstall.package(“rJava”)すると再インストールが始まり、同様のエラーとなる。
そのためrJavaに依存しているxlsなどをインストールできないが、 library(“rJava”)でロードしてからインストールするとエラーなくインストールが完了する。