R言語の外部インストールがRLinkで使えるように設定する

RLinkは,Wolfram言語とR言語の間のシームレスな交信を簡単にするもので,特にR言語のrJavaパッケージとJRIのネイティブライブラリに依存する.RLinkは予め構築されたJRIライブラリをさまざまな過去のWindowsとmacOSのR言語バージョン用にバンドルすることによって,箱から出してすぐに使える便利さを提供するが,確実に接続できるようにするために追加のステップが必要となることもある.

このテクニカルドキュメントは,デフォルトのパラメータでInstallR関数を呼び出すときに結果がうまくいかないという問題が起ることに対処することを目的として書かれている.そのような問題は,Linuxシステムで起こりやすく,他のプラットフォームでもたまに起る.特に事前構築されたJRIライブラリがまだRLinkに統合されていないより新しいR言語バージョンで起こりやすい.

この設定プロセスは通常,個々のRのインストールに対して一度だけ行わなければならないものである.一旦完了すると,R言語とWolfram言語の接続は強固なままである.このガイドの説明に従うと,ユーザは選んだR配布をシームレスにRLinkに統合することができる.

必要条件

R

いずれかのバージョンのRがすでにインストールされていなければならない.複数のRのバージョンが韻酢っとオールされていることは問題ではないが,その場合はこのドキュメントで説明されるように,設定の仕方が少し異なる.

Java Development Kit (JDK)

RをRLinkで使えるように設定するためには,ある程度新しいバージョンのJava/Java Development Kit (JDK)がインストールされていなければならない.JDK 11以降のバージョンが推奨される.

JDKをダウンロードしてインストールする.後で必要となるので,どのディレクトリにインストールしたかの記録を取っておく.

macOS

AzulのJLKが一つのお勧めオプションである.

インストールされたJDKへのパスの例:

/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home

Windows

AzulのJLKが一つのお勧めオプションである.

インストールされたJDKへのパスの例:

C:\Program Files\Zulu\zulu-17

Linux

厳密なインストールの過程は,JDKの種類と使用しているLinuxのフレーバーによる.以下は,OpenJDK 17とCentOS Linuxを使った例である:

sudo yum install java-17-openjdk-devel

Debianベースの配布では,コマンドは以下と似たものになるかもしれない:

sudo apt install -y openjdk-17-jdk

インストールされたJDKへのパスの例:

/usr/lib/jvm/java-17-openjdk

構築と開発のツール

macOS

macOSでは,特定のXcodeでApple Developer Toolsをインストールする必要がある場合もある.まずは以下の簡単なメソッドを試し,それがうまくいかない場合にのみインストールすることをお勧めする.

Windows

このテクニカルノートの目的の面においてはWindowsでは追加の必要条件はない.

Windows上でソースからrJava Rパッケージを構築するプロセスは,比較的複雑であるため,このテクニカルノートでは触れない. 新しいバージョンのRについては,ほとんどの場合Windows用のCRANで事前にコンパイルされたバイナリバージョンのパッケージが使用できる.古いバージョンのRについては,RLinkに事前構築されたJRIライブラリがすでに含まれている.

Linux

Linuxでは,rJava Rパッケージ用のRの設定と構築のプロセスで通常CとJavaのソースコードをコンパイルすることが必要である.つまり標準開発ツールをインストールする必要がある.これらのインストールの過程はLinuxのフレーバーによる.

以下はRed Hat派生のLinuxフレーバーの例である:

sudo yum groupinstall "Development Tools"

追加のライブラリが必要であることもある:

sudo yum install ncurses-devel zlib-devel texinfo gtk+-devel gtk2-devel
sudo yum install qt-devel tcl-devel tk-devel kernel-headers kernel-devel

具体的にどのライブラリとツールが必要であるかは,Linuxフレーバーと使用しているLinuxマシンの設定の詳細によって異なる.

Rの設定過程

ここで説明する過程は,それぞれのRのインストールについて一度行えばよい.通常サポートされているプラットフォームすべてにおいて同じような過程で,rJava Rパッケージをインストールしてそのパッケージへのパスを指定すればよい.しかしプラットフォームごとに詳細は異なる.

macOS

1.  ターミナルを開いてOpen the terminal and go to the Rのインストールフォルダに進む.そのフォルダへの典型的なパスは以下のようなものである:

/Library/Frameworks/R.framework/Versions/4.1-arm64/Resources

2.  使用するRバージョンだけがインストールされている場合やシステムのデフォルトバージョンである場合には,ターミナルに以下をタイプする:

./R

それ以外の場合には,ターミナルで以下の行を実行する(これらの行は,開始したR REPLが現行のグローバルデフォルトではなく,意図したバージョンのRを参照するために通常必要である):

export R_HOME=$(pwd)
cd bin/exec
export PATH=$(pwd):$PATH
./R

3.  以下のようなRプロンプトが表示されるはずである:

4.  常に必要なわけではないが,JAVA_HOME環境変数をインストールされたJDKのホームパスに設定することが推奨される.それを行うためには,以下をRのREPLに入力(正しいパスをJDKに挿入)する:

Sys.setenv(JAVA_HOME="/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home")

5.  次に以下をR REPLに入力する:

install.packages('rJava', repos='http://cran.us.r-project.org', dependencies=TRUE)

インストールが成功した結果の出力は以下のような形になる:

X11モジュールについての警告(上のスクリーンショットにはない)が表示されることもあるが,無視しても大丈夫である.

6.  パッケージのインストールに成功したことを確認し,パッケージの場所を知るためには,以下をタイプする:

find.package('rJava')

結果は以下のような形で表示される:

このパスはRLinkにJRI ライブラリを構築するように指示する際に使われるので,メモしておくことが重要である.

7.  この時点でR REPLを終了することができる:

8.  JRIライブラリを含むフォルダへの完全なパス(RLinkに指示しなければならないパス)は jriサブフォルダが加えられた先ほどのパスであることに注意する:

これでmacOSでのRの設定プロセスは完了である.

考えられる問題

rJavaパッケージをソースから構築する必要がある

特に古いバージョンのRでは,事前構築されたrJavaパッケージがR配布サーバにないことがある.その場合,ソースから構築する必要がある.これを行う場合には,上で説明したステップ5でミラー選択を入力した後に以下と同じようなスクリーンが表示される:

macOSでは,このステップの完了には特定のXcodeでApple Developer Toolsをインストールする必要がある.これにはさらに追加のステップが必要になることもある.

Xcodeがインストールされている場合には,プロンプトに"y"または"yes"とタイプする.その後コンパイルプロセスを続けることができる.

rJavaの構築プロセス中のエラー"clang: error: unsupported option '-fopenmp'"

上に記載されているようにソースからrJavaパッケージをコンパイルすると,以下のようなコンパイルエラーが発せられることがある:

その場合には,追加のステップが必要である.上に記載されているステップ1と2にまず従う.その後,Clang/OpenMP(以下の指示のパッケージマネージャとしてここではHomebrewが想定されている)をインストールする必要がある.ターミナルプロンプトに以下をタイプする:

brew install llvm libomp
export CC=/usr/local/opt/llvm/bin/clang

JAVA_HOME環境変数を設定あるいはエキスポートする(インストールされたJDKへの正しいパスを使うこと)ことも必要となる:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home

その後このコマンド(以下はサンプルの出力)をResources/binディレクトリから実行する:

./R CMD javareconf

そして,もとの手順のステップ3に戻って従う.ソースからrJavaを構築するプロンプトが返されたら"yes"とタイプする.構築プロセスは正常に行えるはずである.

Windows

1.  Windowsのコマンドラインコンソールを開き,Rのインストールフォルダに行く.管理者権限でこれを行うことが望ましいが,絶対必要というわけではない.

そのフォルダへの典型的なパスは以下に似たものになる:

C:\Program Files\R\R-4.3.1

binサブフォルダに行く:

cd bin

2.  インタラクティブなRコンソール/REPLを入力する:

R

以下に似たRプロンプトが表示される:

3.  R REPLでJAVA_HOME 環境変数を以下のようにインストールされたJDKへのパスに設定(使用しているシステムの正しいパスを挿入)する:

Sys.setenv(JAVA_HOME="C:\\Program Files\\Zulu\\zulu-11")

パスのセグメントを区別するためにダブルスラッシュを必ず使う.

4.  次にR REPLにタイプする:

install.packages('rJava', repos='http://cran.us.r-project.org', dependencies=TRUE)

インストールに成功した場合には以下のような出力が表示される:

特にコマンドラインシェルが管理者権限なしで起動された場合には,標準Rライブラリの場所に書込みができないことがある.その場合には,パッケージが保存されている別のライブラリの場所を使う許可をRが求めてくる.すべての質問に対して"y"とタイプしてこれが行われるようにする.

使用可能なバイナリバージョンが最新のものではないこともある.その場合,Rはバイナリバージョンを使って継続するか,ソースからライブラリを構築するかを尋ねる.使用可能なバイナリバージョンを使って続行するには,プロンプトに"n"と答えるべきである.

5.  パッケージのインストールに成功したことを確認し,パッケージの場所を知るためには,以下をタイプする:

find.package('rJava')

結果は以下のような形になる:

このパスはRLinkにJRI ライブラリを構築するように指示する際に使われるので,メモしておくことが重要である.

6.  この時点でR REPLを終了することができる:

7.  JRIライブラリを含むフォルダへの完全なパス(RLinkに指示しなければならないパス)は jri/x64サブフォルダが加えられた先ほどのパスであることに注意する:

これでWindowsでのRの設定プロセスは完了である.

追加情報

WindowsにおけるrJavaのインストールと構築のプロセスについての追加情報は,ここで見ることができる.

Linux

1.  ターミナルを開き,Rのインストールフォルダに行く.そのフォルダへの典型的なパスは以下に似たものになる:

/opt/R/4.3.1/lib64/R

使用するRバージョン以外のバージョンがインストールされている場合には,ターミナルで以下の行を実行する(これで正しいバージョンのRが正しいライブラリとともに起動される):

export R_HOME=$(pwd)
export LD_LIBRARY_PATH=$(pwd)/lib

2.  必ずしも必要ではないが,以下も実行する(インストールされたJDKへの正しいパスをここに挿入する)ことが推奨される:

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk

以下を実行することが必要であることも多い:

sudo update-alternatives --config java

提供された選択の中から正しいJavaバージョンを選ぶ(プロンプトで選択を入力する):

次にRが選択されたJava/JDKのバージョンを使うように設定する:

sudo ./bin/R CMD javareconf

成功したときに表示される出力のサンプルは以下のようなものである:

3.   最後にR REPLを起動する.

使用するRバージョンがインストールされた唯一のバージョンである場合やシステムのデフォルトバージョンである場合は,ターミナルに以下をタイプする:

./R

その他の場合:

cd bin/exec
export PATH=$(pwd):$PATH
./R

以下に似たRプロンプトが表示されるはずである:

4.  次にR REPLにタイプする:

install.packages('rJava', repos='http://cran.us.r-project.org', dependencies=TRUE)

現行ユーザが書き込める場所に標準Rライブラリがない場合は,別の場所にパッケージを保存することを薦めるプロンプトが表示されることもある:

その場合には,どちらのプロンプトにも"y"とタイプする.

インストールが成功した場合の出力は以下のようなものである:

5.  パッケージのインストールに成功したことを確認し,パッケージの場所を知るためには,以下をタイプする:

find.package('rJava')

結果は以下のような形になる:

このパスはRLinkにJRI ライブラリを構築するように指示する際に使われるので,メモしておくことが重要である.

6.  この時点でR REPLを終了することができる:

7.  JRIライブラリを含むフォルダへの完全なパス(RLinkに指示しなければならないパス)は jriサブフォルダが加えられた先ほどのパスであることに注意する:

これでLinuxでのRの設定プロセスは完了である.

考えられる問題

"Unable to run a simple JNI program"エラー

rJavaパッケージの構築プロセス中に以下のようなエラーが表示されることがある:

この場合には,誤ったバージョンのJDK(JDK 1.8)が使われていたためにエラーが表示された.ステップ2のサブステップをすべて行うと,エラーは表示されなくなるはずである.これらのステップは指定のRセッションにおいて正しいバージョンのJava/JDKが使われるように設定するためのステップだからである.

RLinkを設定された外部のR配布と一緒に使う

指定のR配布がRLinkと一緒に使われるように一旦設定すると,その配布でRLinkが使える.以下はRLinkがサポートされているさまざまなプラットフォーム上で適切に設定されたR配布に接続する例である.

macOS

以下は,macOS上で正しく設定された外部のRのインストールでどのようにRLinkを起動すべきかについての典型的な例である.

まずRLinkをロードする:
次にInstallRを呼び出し,外部のRのインストールについての追加情報(Rのホームディレクトリの場所とバージョン,そして重要なものとして,先ほど説明した設定プロセス中に構築またはインストールされたネイティブJRIライブラリの場所)を提供する:
次にRが起動され, RLinkが正常に作動しているかどうかを,Rの側でサンプル入力を評価することによって確かめる:

Windows

以下は,Windows上で正しく設定された外部のRのインストールでどのようにRLinkを起動すべきかについての典型的な例である.

まずRLinkをロードする:
次にInstallRを呼び出し,外部のRのインストールについての追加情報(Rのホームディレクトリの場所とバージョン,そして重要なものとして,先ほど説明した設定プロセス中に構築またはインストールされたネイティブJRIライブラリの場所)を提供する.jriフォルダ内にx64サブフォルダがあることに注意する.InstallRが正しく作動するためには,64ビットのWindowsではこれを含めることが重要である:
次にRが起動され, RLinkが正常に作動しているかどうかを,Rの側でサンプル入力を評価することによって確かめる:

Linux

以下は,Linux上で正しく設定された外部のRのインストールでどのようにRLinkを起動すべきかについての典型的な例である.

まずRLinkをロードする:
次にInstallRを呼び出し,外部のRのインストールについての追加情報(Rのホームディレクトリの場所とバージョン,そして重要なものとして,先ほど説明した設定プロセス中に構築またはインストールされたネイティブJRIライブラリの場所)を提供する:
次にRが起動され, RLinkが正常に作動しているかどうかを,Rの側でサンプル入力を評価することによって確かめる: