Mon application doit effectuer des opérations R telles que:
m = matrix(sample(0:1,100, rep=T),ncol=10)
Les résultats devraient être disponibles pour une application Java.
Le package Rserve relie R à d'autres langues, car il agit comme un serveur TCP/IP. J'ai lu le site Web, mais je ne sais pas comment créer l'application la plus simple pouvant utiliser Rserve.
Quelles étapes sont nécessaires pour créer une application Eclipse simple qui utilise Rserve pour exécuter des commandes R à partir de Java?
Il existe une version binaire de Rserve dans la section de téléchargement (www.rforge.net/Rserve/files/ J'ai la version R 2.13 et Windows xp, j'ai donc besoin de télécharger le binaire Windows: Rserve_0.6-8.Zip (541.3kb, mis à jour : Mer.18 avril 07:00:45 2012)). Copiez le fichier dans le répertoire contenant R.DLL. Après avoir installé Rserve de CRAN
install.packages("Rserve")
en R (j'ai RStudio - chose pratique: Télécharger RStudio IDE ). commencé Rserve est à partir de R, tapez simplement
library(Rserve)
Rserve()
Vérifiez dans le Gestionnaire des tâches - Rserve.exe doit être exécuté. Après avoir créé un Java dans Eclipse, créez un répertoire appelé lib sous ce projet. Collez 2 pots ici RserveEngine.jar et REngine.jar (www.rforge.net/Rserve/files/). N'oubliez pas d'ajouter ces jars dans les propriétés de votre projet Java. Dans le nouveau code de classe:
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
}
}
}
Voici quelques instructions plus détaillées pour créer un projet RServe à partir de zéro:
Pour l'accès à distance:
Ajoutez ce qui suit à Rserv.conf
workdir /tmp/Rserv
remote enable
auth required
plaintext disable
port 6311
maxsendbuf 0 (size in kB, 0 means unlimited use)
Dans R: exécutez les commandes suivantes
library(Rserve)
Pour les fenêtres:
Rserve()
Pour Mac:
Rserve(args="--no-save")
Une instance de Rserve s'exécute maintenant sur le port localhost 6311.
Pour cela, je vais utiliser Eclipse:
Ajoutez ce code à la classe
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");
}
}
Enfin, exécutez HelloWorldApp.Java
Pour ceux qui utilisent Maven
<dependency>
<groupId>org.nuiton.thirdparty</groupId>
<artifactId>REngine</artifactId>
<version>1.7-3</version>
</dependency>
<dependency>
<groupId>org.rosuda.REngine</groupId>
<artifactId>Rserve</artifactId>
<version>1.8.1</version>
</dependency>
Rapides, en essayant de séparer les tâches:
Rserve peut être installé seul. Commencez par là.
Rserve a des exemples de clients. Essayez les exemples Java Java pour travailler.
De là, écrivez votre nouveau programme.
Eclipse est entièrement facultatif. Vous n'êtes pas obligé de l'utiliser. Si c'est une étape de plus à apprendre, pensez à la sauter. Une fois que 1 à 3 sont corrects, découvrez comment exprimer les dépendances de génération dans Eclipse.
Il y a deux façons d'appeler R à partir de Java - JRI et RServe. This est un plugin qui vous aidera à configurer RJava sur Windows. Si vous cherchez un plus solution au niveau de la production, alors Rserve sert un meilleur but. Cet exemple montre comment exécuter un exemple de programme RServe. Si vous utilisez RServe, exécutez votre commande dans la fonction eval
REXP m = c.eval("matrix(sample(0:1,100, rep=T),ncol=10)")
Il existe des infrastructures de données par défaut que vous pouvez utiliser pour convertir m (REXP).