MacPortsでJAGSを入れる場合はちょっと注意

MacでJAGSをインストールする場合,

  • SourceForgeからパッケージをダウンロードしてインストールする方法
  • MacPortsを使ってインストールする方法

の2通りがある.どちらで入れてもJAGS自体に違いはないのだが,Rのrjagsパッケージをインストールする際に少し注意しなければいけないポイントがある.1つ目の方法でパッケージからインストールした場合だと,いつも通りに

1
2
3
# パッケージからインストールした場合
> install.packages("rjags")
> library(rjags)

とすれば良いのだが,MacPortsでインストールした場合では,

1
2
3
# MacPortsからインストールした場合
> install.packages("rjags", type="source", configure.args = '--with-jags-lib=/opt/local/lib --with-jags-include=/opt/local/include/JAGS --with-jags-modules=/opt/local/lib/JAGS/modules-3')
> library(rjags)

のように,パッケージのインストールの際に色々とオプションを付ける必要がある.というのも,パッケージからインストールした場合では/usr/local/以下にインストールされるのに対し,MacPortsからインストールした場合では/opt/local/以下にインストールされるからだ.Rでrjagsパッケージをインストールする際には,どうやら/usr/local/以下のモジュールや共有ライブラリを参照するようなので,MacPortsで入れた場合にはそもそもディレクトリが違うためファイルが見つからないといったエラーが出る.

他の解決方法

ちなみに,/usr/local/lib以下にシンボリックリンクを貼って強引に解決する方法もある.自分は最初こちらで対処していたのだが,長期的に考えた場合にJAGSのバージョンアップによってdylibの名前が変わる可能性などもあるので,上のようにパッケージのインストールの段階で対処する方が良いだろう.

1
2
3
$ cd /usr/local/lib
$ sudo ln -s /opt/local/lib/libjags.3.dylib .
$ sudo ln -s /opt/local/lib/JAGS .

参考:MacPortsの場合でinstall.package(“rjags”)で入れてしまったときのrjags読み込み時のエラー

1
2
3
4
5
6
7
8
9
10
> library(rjags)
 要求されたパッケージ coda をロード中です
 要求されたパッケージ lattice をロード中です
Error :  .onLoadはloadNamespace()(rjagsに対する)の中で失敗しました、詳細は:
 call: dyn.load(file, DLLpath = DLLpath, ...)
 error:  共有ライブラリ '/Library/Frameworks/R.framework/Versions/2.15/Resources/library/rjags/libs/x86_64/rjags.so' を読み込めません:
  dlopen(/Library/Frameworks/R.framework/Versions/2.15/Resources/library/rjags/libs/x86_64/rjags.so, 10): Library not loaded: /usr/local/lib/libjags.3.dylib
  Referenced from: /Library/Frameworks/R.framework/Versions/2.15/Resources/library/rjags/libs/x86_64/rjags.so
  Reason: image not found
 エラー:  '‘rjags’' に対するパッケージもしくは名前空間のロードが失敗しました

実行環境

  • Mac OS X 10.8.2
  • R version 2.15.1
  • JAGS 3.3.0
  • rjags version 3-7

参考