web-dev-qa-db-ja.com

Java-R統合?

Java部分最小二乗回帰を実行する必要のあるアプリがあります。Java PLSRの実装はありません。Wekaには何かあったかもしれません。ある時点では気に入っていますが、APIには含まれていません一方で、追加のボーナスを備えた優れたR実装を見つけました。 PLSRの実装方法の違いにより、問題が発生する可能性が低くなります。

問題は:Javaを有効にしてRを呼び出し、いくつかのパラメーターを関数に渡して結果を読み戻すのに十分な(そして使いやすい)パッケージはありますか?私の他のオプションはhave Java ProcessでRを生成し、監視します。データはディスクに読み書きされます。2つのうち、どちらをお勧めしますか?明らかな3番目のオプションがありませんか?

53
mbatchkarov

私は過去に2つの代替案を成功裏に使用しました。

[〜#〜] jri [〜#〜]

  • 長所:おそらくより良いパフォーマンス。
  • 短所:Win/UNIXでは異なるいくつかの環境変数とライブラリを設定する必要があります。

RServe

  • 長所:セットアップが簡単で、Rを初期化したり、Rライブラリに対してリンクしたりする必要がなく、別のマシンで実行できます。
  • 短所:TCP/IP(サーバーが実行中)に基づき、Rからのコールバックはありません.

他の選択肢私は使用したことがありません: RCaller

49
Guido

ダンカンテンプルラングによる作業があります: http://rss.acs.unt.edu/Rdoc/library/SJava/Docs/RFromJava.pdf

最も堅牢なソリューションに関する私の推測は、 [〜#〜] jgr [〜#〜] です。 JGRの開発者には、メーリングリスト Stats-RosudaメーリングリストArchive は、2013年以降もリストがアクティブのままであることを示します。

Googlecode に掲載されているコードもあります。例は http:// stdioeです。 blogspot.com/2011/07/rcaller-20-calling-r-from-Java.html

10
42-

これは古い質問です。しかし、ここで閲覧している人はまだ興味があります。JRI/ rjava(JNIベースのブリッジ)を使用してこのタイプのことを行う方法(方法-toはLinux開発環境に焦点を合わせています)。また、Rや同様のフレームワークを呼び出すことにより、「数学的な」ことを行うための代替アプローチを比較対照します。

URL> http://buildlackey.com/integrating-r-and-Java-with-jrirjava-a-jni-based-bridge/

8
Chris Bedford

Renjinは、Rの多くのパッケージの統合だけでなく、オブジェクトを介したJavaとRの間の簡単な通信も可能にする代替手段です。

http://www.renjin.org/

6
juanmajmjr

JRIには、JavaからRを呼び出すための低レベルと高レベルの両方のインターフェースがあります。 R Java環境を http://www.studytrails.com/RJava-Eclipse-Plugin/ に設定するのに役立つEclipseプラグインがあります。

3
user1569047

これは古い質問のようです。ただし、RserverJavaは、RとJavaを統合するための2つの優れたパッケージです。次のブログでは、これら両方のライブラリの使用法について説明しています。

RJavaの場合: http://www.codophile.com/how-to-integrate-r-with-Java-using-rjava/

Rserveの場合: http://www.codophile.com/how-to-integrate-r-with-Java-using-rserve/

これが役立つことを願っています。

3
Rajeev Singh

しばらく前に同様のニーズがあり、Rへのインターフェイスのいくつかをテストしました。私のニーズ(windows、c#)に最適であるとわかったのは Rserve で、これはJavaで書かれていると思います。私の唯一の不満は、64ビットではなかったことです。 C#で書かれたシンプルなクライアントを使用しましたが、非常にうまく機能しました。 Javaクライアントの方がはるかに優れていると確信しています。

1
darckeen

FastRはRの GraalVM ベースの実装です。JVMアプリケーションへの組み込みは次のように簡単です。

Context ctx = Context.newBuilder("R").allowAllAccess(true).build();
ctx.eval("R", "sum").execute(new int[] {1,2,3});

この記事の詳細: https://medium.com/graalvm/faster-r-with-fastr-4b8db0e0dceb

1
Steves