Difference between revisions of "JRI"
(→Passer une matrice à R depuis Java) |
(→Principes de bases) |
||
(14 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | Java R Interface est une bibliothèque JNI ( donc à compiler ) pour communiquer en Java avec R. | + | Java R Interface est une bibliothèque JNI ( donc à compiler ) pour communiquer en [[Java]] avec [[R]]. |
=Installation= | =Installation= | ||
− | Pour pouvoir installer JRI, vous devez avoir correctement installé et configuré préalablement Java ( 1.5 minimum ) et R. | + | Pour pouvoir installer JRI, vous devez avoir correctement installé et configuré préalablement Java ( 1.5 minimum ) et R (avec les libraries dynamiques comme libR.so) . |
− | Téléchargez l'archive | + | Téléchargez l'archive. |
− | * | + | |
− | + | *JRI.tar.gz sur [http://www.rforge.net/JRI/ rforge.net] | |
− | *[http://www. | + | *ou la version 0.4-0 directement [http://www-bio3d-igbmc.u-strasbg.fr/~dkieffer/Librairie/JRI/JRI_0.4-0.tar.gz ici]. |
Ensuite déployez le répertoire et placez vous dans sa racine. | Ensuite déployez le répertoire et placez vous dans sa racine. | ||
Line 32: | Line 32: | ||
*R_INCLUDE_DIR | *R_INCLUDE_DIR | ||
*R_DOC_DIR | *R_DOC_DIR | ||
− | + | *LD_LIBRARY_PATH | |
− | Vous pouvez les configurer soit directement dans le système soit les paramétrer dans un script de démarage comme dans le fichier '''run''' | + | Vous pouvez les configurer soit directement dans le système soit les paramétrer dans un script de démarage comme dans le fichier '''run''' (voir l'[[JRI#Script de démarage de mon programme Java | exemple]] ). |
==Les variables java== | ==Les variables java== | ||
Line 39: | Line 39: | ||
A la commande Java, vous devez rajouter deux options obligatoires: | A la commande Java, vous devez rajouter deux options obligatoires: | ||
*-Djava.library.path="Le repertoire racine de JRI" | *-Djava.library.path="Le repertoire racine de JRI" | ||
− | *-cp "Le repertoire racine de JRI/src/JRI.jar":"Repertoire de | + | *-cp "Le repertoire racine de JRI/src/JRI.jar":"Repertoire de vos classes et jar" |
=Principes de bases= | =Principes de bases= | ||
− | Tout se fait à partir d'un objet Rengine qui représente une instance de R. Il y a deux commandes principales: | + | Tout se fait à partir d'un objet Rengine qui représente une instance de [[R]] ([[JRI#Se connecter à R | méthode]] pour avoir cette instance) . Il y a deux commandes principales: |
− | *'''assign'''("R ref",java Object) qui va convertir un objet Java en Objet R | + | *'''assign'''("R ref",java Object) qui va convertir un objet Java en Objet R. |
*'''eval'''("R commande") qui va executer la commande R et renvoyer le résultat en un objet java REXP qui pourra ensuite être convertie en un objet Java correspondant via ses méthodes. | *'''eval'''("R commande") qui va executer la commande R et renvoyer le résultat en un objet java REXP qui pourra ensuite être convertie en un objet Java correspondant via ses méthodes. | ||
+ | |||
+ | '''Attention''': La méthode ''assign'' n'est pas exécutée tout de suite dans R. L'objet sera effectif seulement après un ''eval("R ref")''. | ||
+ | |||
+ | La doc de l'API 0.4-0 est téléchargeable [http://www-bio3d-igbmc.u-strasbg.fr/~dkieffer/Librairie/JRI/JRI_doc.zip ici] | ||
=Exemples= | =Exemples= | ||
− | == | + | ==Script de démarage de mon programme Java== |
+ | #!/bin/sh | ||
+ | # | ||
+ | #Var environment | ||
+ | # | ||
+ | R_HOME=/usr/lib/R | ||
+ | export R_HOME | ||
+ | R_SHARE_DIR=/usr/share/R/share | ||
+ | export R_SHARE_DIR | ||
+ | R_INCLUDE_DIR=/usr/share/R/include | ||
+ | export R_INCLUDE_DIR | ||
+ | R_DOC_DIR=/usr/share/R/doc | ||
+ | export R_DOC_DIR | ||
+ | LD_LIBRARY_PATH=${R_HOME}/lib:${R_HOME}/bin | ||
+ | export LD_LIBRARY_PATH | ||
+ | # | ||
+ | #java commande | ||
+ | # | ||
+ | java -Djava.library.path="/home/moi/JRI" -cp "/home/moi/JRI/src/JRI.jar" -jar " /home/moi/RTest/RTest.jar" | ||
− | /** connect to a new instance of R. | + | ==Se connecter à R== |
+ | |||
+ | /** connect to a new instance of R. | ||
+ | * | ||
+ | * for a simple instance use: Rengine R = connect(null,false,null); | ||
+ | * | ||
* @param args arguments to be passed to R. Please note that R requires the presence of certain | * @param args arguments to be passed to R. Please note that R requires the presence of certain | ||
* arguments (e.g. <code>--save</code> or <code>--no-save</code> or equivalents), so passing an empty | * arguments (e.g. <code>--save</code> or <code>--no-save</code> or equivalents), so passing an empty | ||
Line 81: | Line 108: | ||
/** | /** | ||
− | * Create a matrix objet in R | + | * Create a matrix objet in R from 2D table of double |
* | * | ||
* @param r the R instance used | * @param r the R instance used | ||
Line 99: | Line 126: | ||
if(matrix.length>0){ | if(matrix.length>0){ | ||
r.assign(assign,matrix[0]); | r.assign(assign,matrix[0]); | ||
− | resultat=r.eval(assign+" <- "+assign+" ,nr=1)"); | + | resultat=r.eval(assign+" <- matrix( "+assign+" ,nr=1)"); |
}else{ | }else{ | ||
return null; | return null; | ||
Line 112: | Line 139: | ||
=liens= | =liens= | ||
[http://www.rforge.net/JRI/ Le site du projet] | [http://www.rforge.net/JRI/ Le site du projet] | ||
+ | |||
+ | [http://www.rosuda.org/R/nightly/JavaDoc/org/rosuda/JRI/package-summary.html La javaDoc] | ||
+ | |||
+ | La doc de l'API 0.4-0 en [http://www-bio3d-igbmc.u-strasbg.fr/~dkieffer/Librairie/JRI/JRI_doc.zip zip] | ||
+ | =Voir aussi= | ||
+ | *[[Java]] | ||
+ | *[[R]] | ||
+ | *[[rJava]] |
Latest revision as of 09:08, 18 October 2007
Java R Interface est une bibliothèque JNI ( donc à compiler ) pour communiquer en Java avec R.
Contents
Installation
Pour pouvoir installer JRI, vous devez avoir correctement installé et configuré préalablement Java ( 1.5 minimum ) et R (avec les libraries dynamiques comme libR.so) .
Téléchargez l'archive.
- JRI.tar.gz sur rforge.net
- ou la version 0.4-0 directement ici.
Ensuite déployez le répertoire et placez vous dans sa racine.
- Sous linux
./configure make
- Sous Windows
sh configure.win make
Lancement
Lors de l'installation, à la racine, un script run à été créé. C'est un exemple de script pour pouvoir lancer un programme Java utilisant JRI.
Le script est en deux parties. Une pour configurer les variables d'environnements Système et une pour les variables java.
Les variables d'environnements
- R_HOME
- R_SHARE_DIR
- R_INCLUDE_DIR
- R_DOC_DIR
- LD_LIBRARY_PATH
Vous pouvez les configurer soit directement dans le système soit les paramétrer dans un script de démarage comme dans le fichier run (voir l' exemple ).
Les variables java
A la commande Java, vous devez rajouter deux options obligatoires:
- -Djava.library.path="Le repertoire racine de JRI"
- -cp "Le repertoire racine de JRI/src/JRI.jar":"Repertoire de vos classes et jar"
Principes de bases
Tout se fait à partir d'un objet Rengine qui représente une instance de R ( méthode pour avoir cette instance) . Il y a deux commandes principales:
- assign("R ref",java Object) qui va convertir un objet Java en Objet R.
- eval("R commande") qui va executer la commande R et renvoyer le résultat en un objet java REXP qui pourra ensuite être convertie en un objet Java correspondant via ses méthodes.
Attention: La méthode assign n'est pas exécutée tout de suite dans R. L'objet sera effectif seulement après un eval("R ref").
La doc de l'API 0.4-0 est téléchargeable ici
Exemples
Script de démarage de mon programme Java
#!/bin/sh # #Var environment # R_HOME=/usr/lib/R export R_HOME R_SHARE_DIR=/usr/share/R/share export R_SHARE_DIR R_INCLUDE_DIR=/usr/share/R/include export R_INCLUDE_DIR R_DOC_DIR=/usr/share/R/doc export R_DOC_DIR LD_LIBRARY_PATH=${R_HOME}/lib:${R_HOME}/bin export LD_LIBRARY_PATH # #java commande # java -Djava.library.path="/home/moi/JRI" -cp "/home/moi/JRI/src/JRI.jar" -jar " /home/moi/RTest/RTest.jar"
Se connecter à R
/** connect to a new instance of R. * * for a simple instance use: Rengine R = connect(null,false,null); * * @param args arguments to be passed to R. Please note that R requires the presence of certain * arguments (e.g.--save
or--no-save
or equivalents), so passing an empty * list usually doesn't work. * @param b if set totrue
the the event loop will be started as soon as * possible, otherwise no event loop is started. Running loop requiresinitialCallbacks
to * be set correspondingly as well. * @param rMain an instance implementing the {@link org.rosuda.JRI.RMainLoopCallbacks * RMainLoopCallbacks} interface that provides methods to be called by R * @return a new R instance * @throws java.lang.Exception when the connection failed */ public static Rengine connect(String[] args,boolean b, RMainLoopCallbacks rMain) throws Exception{ // just making sure we have the right version of everything if (!Rengine.versionCheck()) { throw new Exception("** Version mismatch - Java files don't match library version."); } Rengine re=new Rengine(args, b, rMain); // the engine creates R is a new thread, so we should wait until it's ready if (!re.waitForR()) { throw new Exception("Cannot load R"); } return re; }
Passer une matrice à R depuis Java
/** * Create a matrix objet in R from 2D table of double * * @param r the R instance used * @param matrix the 2D table of double * * the matrix must have always the same column number on every row * * @param assign the R object name * @return R matrix instance or null if R return a error * * To convert this R matrix to double[][], use asMatrix() method * or r.eval(assign).asMatrix(); * */ public static REXP toRmatrix(Rengine r,double[][] matrix,String assign){ REXP resultat=null; if(matrix.length>0){ r.assign(assign,matrix[0]); resultat=r.eval(assign+" <- matrix( "+assign+" ,nr=1)"); }else{ return null; } for(int i=1; i<matrix.length;i++){ r.assign("intermediaire",matrix[i]); resultat=r.eval(assign+" <- rbind("+assign+",matrix(intermediaire,nr=1))"); } return resultat; }
liens
La doc de l'API 0.4-0 en zip