web-dev-qa-db-ja.com

JavaからEclipseとRserveを使用してRを呼び出す単純なプログラム

私のアプリケーションは、次のようなR操作を実行する必要があります。

m = matrix(sample(0:1,100, rep=T),ncol=10)

結果は、Javaアプリケーションで利用できるはずです。

Rserveパッケージ は、TCP/IPサーバーとして機能するため、Rを他の言語にブリッジします。私はウェブサイトを読みましたが、Rserveを使用できる最も単純なアプリケーションの作成方法がわかりません。

Rserveを使用してJavaからRコマンドを実行する単純なEclipseアプリケーションを作成するには、どのような手順が必要ですか?

22
Musmar

ダウンロードセクションにRserveのバイナリバージョンがあります(www.rforge.net/Rserve/files/バージョンR 2.13とWindows XPがあるので、Windowsバイナリをダウンロードする必要があります:Rserve_0.6-8.Zip(541.3kb、更新済み:水4月18日07:00:45 2012))。 R.DLLを含むディレクトリにファイルをコピーします。 CRANからRserveをインストールした後

install.packages("Rserve")

r(私はRStudioを持っている-便利なもの: Download RStudio IDE )。開始されたRserveはR内からです。

library(Rserve)
Rserve()

タスクマネージャーのСheck-Rserve.exeを実行する必要があります。 Javaプロジェクトを作成した後、そのプロジェクトの下にlibというディレクトリを作成します。ここに2つのjarを貼り付けますRserveEngine.jarおよびREngine.jar(www.rforge.net/Rserve/files/)。 Javaプロジェクトのプロパティにこのjarを追加することを忘れないでください。

import org.rosuda.REngine.*;
import org.rosuda.REngine.Rserve.*;

public class rserveuseClass {
    public static void main(String[] args) throws RserveException {
        try {
            RConnection c = new RConnection();// make a new local connection on default port (6311)
            double d[] = c.eval("rnorm(10)").asDoubles();
            org.rosuda.REngine.REXP x0 = c.eval("R.version.string");
            System.out.println(x0.asString());
} catch (REngineException e) {
            //manipulation
        }       

    }
}
21
Alina

ここでは、RServeプロジェクトを最初から作成するための詳細な手順をいくつか示します。

まず、RserveをRでインストールして実行します。

  1. Rをインストールする
  2. CRANからパッケージRServeを追加します。
  3. Rタイプ:install.packages( "Rserve")

リモートアクセスの場合:

  • ファイルを作成します:/etc/Rserv.conf

以下をRserv.confに追加します

workdir /tmp/Rserv
remote enable
auth required
plaintext disable
port 6311
maxsendbuf 0 (size in kB, 0 means unlimited use)

R:次のコマンドを実行します

library(Rserve)

Windowsの場合:

Rserve()

Mac用:

Rserve(args="--no-save")

Rserveのインスタンスがlocalhostポート6311で実行されています。

次Rserveプロジェクトを作成します(Eclipseを使用しています)

このため、私はEclipseを使用します。

  1. RserveEngine.jarおよびREngine.jarを ここ からダウンロードします。
  2. EclipseでJavaプロジェクトを作成します。
  3. プロジェクトディレクトリの下にlibフォルダを作成します。 (srcフォルダーと同じレベル)
  4. RserveEngine.jarおよびREngine.jarをlibフォルダーにコピーします。
  5. Jarファイルをビルドパスに追加します: Instructions
  6. パッケージを追加してから、メインクラスを作成します。HelloWorldAppのような名前にします。

このコードをクラスに追加します

package com.sti.ai;

import Java.io.BufferedReader;
import Java.io.File;
import Java.io.FileNotFoundException;
import Java.io.FileReader;
import Java.io.IOException;

import org.rosuda.REngine.REXP;
import org.rosuda.REngine.REXPMismatchException;
import org.rosuda.REngine.Rserve.RConnection;
import org.rosuda.REngine.Rserve.RserveException;

public class HelloWorldApp {

    public static void main(String[] args) throws RserveException, REXPMismatchException, FileNotFoundException, IOException {
        RConnection c = new RConnection("<Host/ip>", 6311);
        if(c.isConnected()) {
            System.out.println("Connected to RServe.");
            if(c.needLogin()) {
                System.out.println("Providing Login");
                c.login("username", "password");
            }

            REXP x;
            System.out.println("Reading script...");
            File file = new File("<file location>");
            try(BufferedReader br = new BufferedReader(new FileReader(file))) {
                for(String line; (line = br.readLine()) != null; ) {
                    System.out.println(line);
                    x = c.eval(line);         // evaluates line in R
                    System.out.println(x);    // prints result
                }
            }

        } else {
            System.out.println("Rserve could not connect");
        }

        c.close();
        System.out.println("Session Closed");
    }

}

最後に、HelloWorldApp.Javaを実行します。

Mavenをお使いの方へ

REngine

<dependency>
    <groupId>org.nuiton.thirdparty</groupId>
    <artifactId>REngine</artifactId>
    <version>1.7-3</version>
</dependency>

RServe

<dependency>
    <groupId>org.rosuda.REngine</groupId>
    <artifactId>Rserve</artifactId>
    <version>1.8.1</version>
</dependency>
14
Wiggitamoo

簡単なもの、タスクを分離しようとしています:

  1. Rserveは単独でインストールできます。そこから始めましょう。

  2. Rserveにはサンプルクライアントがあります。 Javaサンプルが機能するようにしてください。

  3. そこから、新しいプログラムを作成します。

  4. Eclipseは完全にオプションです。使用する必要はありません。これがもう1つのステップである場合は、スキップすることを検討してください。 1から3が問題なければ、ビルドの依存関係をEclipseで表現する方法を学びます。

3

Java-JRIとRServeからRを呼び出す方法は2つあります。 This は、WindowsでRJavaをセットアップするのに役立つプラグインです。詳細については、生産レベルのソリューションの場合、Rserveがより良い目的を果たします。 これ サンプルは、サンプルのRServeプログラムを実行する方法を示しています。RServeを使用している場合は、eval関数でコマンドを実行します

REXP m = c.eval("matrix(sample(0:1,100, rep=T),ncol=10)")

M(REXP)の変換に使用できるデフォルトのデータ構造がいくつかあります。

2