rJavaが動かなくて困ったので試したコード

Mac OS X (Sierra)でrJavaに依存したパッケージが動かなかったのでなんとかした

Shinya Uryu

1 minute read

時々Javaに依存したライブラリを利用することがある。前に書いた{tabulizer}や、えくせるで出力したい時なんかに使う{xlsx}パッケージなどは{rJava}パッケージを利用しているので、Javaが動かせる環境でないと使えない。

それで先日、{tabulizer}を読み込もうとしたら次のエラーが出た。

Error : .onLoad failed in loadNamespace() for 'rJava', details:
  call: dyn.load(file, DLLpath = DLLpath, ...)
  error: unable to load shared object '/Library/Frameworks/R.framework/Versions/3.3/Resources/library/rJava/libs/rJava.so':
  dlopen(/Library/Frameworks/R.framework/Versions/3.3/Resources/library/rJava/libs/rJava.so, 6): Library not loaded: @rpath/libjvm.dylib
  Referenced from: /Library/Frameworks/R.framework/Versions/3.3/Resources/library/rJava/libs/rJava.so
  Reason: image not found
Error: package or namespace load failed for ‘tabulizer’

Stack Overflowで解決策を探していたのだけど、このコメントが有効だった。感謝感謝。

dyn.load("/Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home/jre/lib/server/libjvm.dylib")
library(tabulizer)

dyn.load()という関数はR外部の関数の呼び出しに使われるやつで、エラーメッセージでLibrary not loaded: @rpath/libjvm.dylibと言われているのでインストールされているlibjvm.dylibのパスを指定するというもの。

実行環境はMac OS 10.12.1。R version 3.3.2。{rJava} 0.9-8、{tabulizer} 0.1.22

comments powered by Disqus