1

Java プログラムからの入力を使用して、R でいくつかの簡単な計算を行い、その Java プログラムに応答を取得することは可能ですか?

Java と R 間のこのデータ交換の典型的な例は、数値の配列 (Javadouble[]配列など) の確率分布関数 (PDF) の計算です。

Java クラス内から、Java/R インターフェイス (JRI) を介して配列を R に渡す必要があり、計算の結果は (JRI が JFrame で行うように) グラフィック プロットではなく、値の別の配列 (または同様の Java データ構造) を、同じ Java クラスから取得してさらに処理できるようにします。

JRI 割り当て部分は次のようになります。

Rengine re=new Rengine(new String [] {"--vanilla"}, false, null);

if (!re.waitForR())
{
    System.out.println ("Cannot load R");
    return;
}

double[] values = ... // The data values

re.assign("data", values);

したがって、問題は、data上記の配列が、R によってグラフィカルにプロットされるのではなく、呼び出し元の Java クラスに返された結果を使用して、既に説明したように (たとえば、PDF の場合) R で処理できるかどうかです。

それは可能ですか?もしそうなら、それを示すサンプルコードはありますか?

4

1 に答える 1

1

これを実装するために私が見ることができる最も簡単な方法は、この単純な方法またはこれらのより慎重な方法のような方法を使用してJavaにRを実行させることです。R は出力を stdout に送信し、Java で取得して解析できます。

?RscriptJava から実行されるシステム コールのフォーマットについては、R を参照してください。

より堅牢な方法 (私が使用したもの) は、Java (または使用している他のプログラム) を使用して、R コマンドとデータを 1 つ以上のテキスト ファイル (おそらく 1 つの script.R と 1 つ以上の data1.タブファイル)、RスクリプトファイルでR読み取りを呼び出し、R内で結果をテキストファイルに保存し、Java(またはその他)に結果を読み取らせてクリーンアップします。ここでの欠点は、もちろん速度です。インライン メソッド (stdin/stdout) を使用できる場合は、はるかに高速になります。

これは JRI を指しているわけではありませんが、任意の R コードと R に自動的に渡される Java ベクトル/マトリックスのコレクションにそのようなインターフェイスを提供する Java (または何でも) でいくつかの関数を作成するのは非常に簡単です。 R 関数に指定された形式を使用して、スクリプト内で?dump.

于 2012-05-23T23:05:47.143 に答える