[R] Problem in S4 object displaying from within a Java application using JRI

RMP r.m.parizi at gmail.com
Mon Mar 30 07:37:02 CEST 2009


I am using JRI (Java R Interface) library in order to call R from within my
Java application. But since the "rmu1" and "rmu2" ,see the following code,
are objects of type S4 once i run the application the value of Null will be
returned for both of them. On this regard, i would appreciate it if anyone
can tell me how i am going to display and/ or convert these objects to Java
objects or any other way to get the result from R. In order to make the
problem more concrete i have attached the entire Java code contain my R
program and the R program itself and its actual result run in isolation:

Java application:

import java.io.*;
import java.awt.Frame;
import java.awt.FileDialog;
import java.util.Enumeration;
import org.rosuda.JRI.Rengine;
import org.rosuda.JRI.REXP;
import org.rosuda.JRI.RList;
import org.rosuda.JRI.RVector;
import org.rosuda.JRI.RMainLoopCallbacks;

public class Main {

    public static void main(String[] args) {
        // just making sure we have the right version of everything
        if (!Rengine.versionCheck()) {
            System.err.println("** Version mismatch - Java files don't match
library version.");
            System.exit(1);
        }
        System.out.println("Creating Rengine (with arguments)");
        // 1) we pass the arguments from the command line
        // 2) we won't use the main loop at first, we'll start it later
        //    (that's the "false" as second argument)
        // 3) the callbacks are implemented by the TextConsole class above
        Rengine re = new Rengine(args, false, new TextConsole());
        System.out.println("Rengine created, waiting for R");
        // the engine creates R is a new thread, so we should wait until
it's ready
        if (!re.waitForR()) {
            System.out.println("Cannot load R");
            return;
        }

        try {
            re.eval("library(kappalab)", true);
            re.eval("library(methods)", true);
            
            re.eval("mu1 <- c(59.73, 27.94,89.67, 62.44)", true);
            re.eval("mu2<- c(57.81, 72.67, 82.97, 62.44)", true);
            re.eval("mu3<- c(45.66, 49.19, 53, 64.39)", true);
            re.eval("mu4<- c(70.39, 80.41, 89.67, 80)", true);

            re.eval("delta.C <- 1", true);
            re.eval("Acp <- rbind (c(mu4,mu2,delta.C), c(mu2,mu3,delta.C),
c(mu3,mu1,delta.C))", true);
            re.eval("wt <- c(0.3,0.3,0.25,0.15)/1", true);
            re.eval("delta.S <- 0.08", true);
            re.eval("Asp <-rbind ( c(1,4,delta.S), c(2,4,delta.S),
c(1,3,delta.S), c(2,3,delta.S),c(3,4,delta.S),c(1,2,-delta.S),
c(2,1,-delta.S))", true);
            re.eval("delta.I <- 0.08", true);
            re.eval("Aii <- rbind (c(1,2,delta.I,1), c(1,3, delta.I,1), c
(1,4, delta.I,1),c(2,3, delta.I,1), c(2,4, delta.I,1), c(3,4,delta.I,1))",
true);
            re.eval("lp <- lin.prog.capa.ident (4, 2, A.Choquet.preorder =
Acp, A.Shapley.preorder = Asp,  A.interaction.interval = Aii)", true);
            re.eval("mv<- mini.var.capa.ident (4, 2, A.Choquet.preorder =
Acp, A.Shapley.preorder = Asp, A.interaction.interval = Aii)", true);
            re.eval("rmu1<- lp$solution", true);
            re.eval("rmu1", true);
            re.eval("rmu2<- mv$solution", true);
            re.eval("rmu2", true);
            re.eval("rbind(c(mu1,weighted.mean(mu1,wt),
Choquet.integral(rmu1,mu1), Choquet.integral(rmu2,mu1)), c(mu2,
weighted.mean(mu2,wt), Choquet.integral(rmu1,mu2),
Choquet.integral(rmu2,mu2)), c(mu3, weighted.mean(mu3,wt),
Choquet.integral(rmu1,mu3), Choquet.integral(rmu2,mu3)),c(mu4,
weighted.mean(mu4,wt), Choquet.integral(rmu1,mu4),
Choquet.integral(rmu2,mu4)))", true);
            re.eval("summary (rmu1)", true);
            re.eval("summary (rmu2)", true);

        } catch (Exception e) {
            System.out.println("EX:" + e);
            e.printStackTrace();
        }
    }
}
/*-------------------------------------------------------------------------*/

class TextConsole implements RMainLoopCallbacks {

    public void rWriteConsole(Rengine re, String text, int oType) {
         System.out.print(text);
    }

    public void rBusy(Rengine re, int which) {
        System.out.println("rBusy(" + which + ")");
    }

    public String rReadConsole(Rengine re, String prompt, int addToHistory)
{
        System.out.print(prompt);
        try {
            BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
            String s = br.readLine();
            return (s == null || s.length() == 0) ? s : s + "\n";
        } catch (Exception e) {
            System.out.println("jriReadConsole exception: " +
e.getMessage());
        }
        return null;
    }

    public void rShowMessage(Rengine re, String message) {
        System.out.println("rShowMessage \"" + message + "\"");
    }

    public String rChooseFile(Rengine re, int newFile) {
        FileDialog fd = new FileDialog(new Frame(), (newFile == 0) ? "Select
a file" : "Select a new file", (newFile == 0) ? FileDialog.LOAD :
FileDialog.SAVE);
        fd.show();
        String res = null;
        if (fd.getDirectory() != null) {
            res = fd.getDirectory();
        }
        if (fd.getFile() != null) {
            res = (res == null) ? fd.getFile() : (res + fd.getFile());
        }
        return res;
    }

    public void rFlushConsole(Rengine re) {
    }

    public void rLoadHistory(Rengine re, String filename) {
    }

    public void rSaveHistory(Rengine re, String filename) {
    }
}

R program embedded in above Java application, but run in isolation:


> local({pkg <- select.list(sort(.packages(all.available = TRUE)))
+ if(nchar(pkg)) library(pkg, character.only=TRUE)})
Loading required package: lpSolve
Loading required package: quadprog
Loading required package: kernlab
> ## E-MUSEUM 6.11.08
> mu1 <- c(59.73, 27.94, 89.67, 62.44)
> mu2<- c(57.81, 72.67, 82.97, 62.44)
> mu3<- c(45.66, 49.19, 53, 64.39)
> mu4<- c(70.39, 80.41, 89.67, 80)
> 
> ##preference threshold relative
> ## to the preorder of the alternatives
> delta.C <-1
> 
> ##corresponding Choquet preorder constraint matrix
> Acp <- rbind (c(mu4,mu2,delta.C), c(mu2,mu3,delta.C), c(mu3,mu1,delta.C))
> 
> 
> ## weight 1=0.3, 2=0.3, 3=0.25, 4=0.15
> ## Shapley preorder constraint matrix
> ## criteria 1,2 should have the same global importance
> ## criteria 3 is more important than criteria 4
> 
> wt <- c(0.3,0.3,0.25,0.15)/1
> delta.S <- 0.08
> 
> Asp <-rbind ( c(1,4,delta.S), c(2,4,delta.S), c(1,3,delta.S),
> c(2,3,delta.S),c(3,4,delta.S),c(1,2,-delta.S), c(2,1,-delta.S))
> 
> ## an interaction preorder constraint matrix
> delta.I <- 0.08
> Aii <- rbind (c(1,2,delta.I,1), c(1,3, delta.I,1), c (1,4, delta.I,1),
+ + c(2,3, delta.I,1), c(2,4, delta.I,1), c(3,4,delta.I,1))
> 
> lp <- lin.prog.capa.ident (4, 2, A.Choquet.preorder = Acp,
> A.Shapley.preorder = Asp,  A.interaction.interval = Aii)
Success: the objective function is 0.0239992 
> 
> 
> mv<- mini.var.capa.ident (4, 2, A.Choquet.preorder = Acp,
> A.Shapley.preorder = Asp, A.interaction.interval = Aii)
> 
> rmu1<- lp$solution
> rmu1
                Mobius.capacity
{}              0.000000
{1}             0.000001
{2}             0.000001
{3}             0.000001
{4}             0.000001
{1,2}           0.391998
{1,3}           0.183999
{1,4}           0.080000
{2,3}           0.183999
{2,4}           0.080000
{3,4}           0.080000
> 
> rmu2<- mv$solution
> unclass(rmu2)
<S4 Type Object>
attr(,"subsets")
 [1]  0  1  2  4  8  3  5  9  6 10 12
attr(,"k")
[1] 2
attr(,"data")
 [1] 0.00000000 0.18284810 0.19427815 0.08567053 0.02284810 0.08000000
 [7] 0.08000000 0.08000000 0.11435513 0.08000000 0.08000000
attr(,"n")
[1] 4
> rmu2
                Mobius.capacity
{}              0.000000
{1}             0.182848
{2}             0.194278
{3}             0.085671
{4}             0.022848
{1,2}           0.080000
{1,3}           0.080000
{1,4}           0.080000
{2,3}           0.114355
{2,4}           0.080000
{3,4}           0.080000
> 
> rbind(c(mu1,weighted.mean(mu1,wt), Choquet.integral(rmu1,mu1),
> Choquet.integral(rmu2,mu1)), c(mu2, weighted.mean(mu2,wt),
> Choquet.integral(rmu1,mu2), Choquet.integral(rmu2,mu2)), c(mu3,
> weighted.mean(mu3,wt), Choquet.integral(rmu1,mu3),
> Choquet.integral(rmu2,mu3)),
+ c(mu4, weighted.mean(mu4,wt), Choquet.integral(rmu1,mu4),
Choquet.integral(rmu2,mu4)))
      [,1]  [,2]  [,3]  [,4]    [,5]     [,6]     [,7]
[1,] 59.73 27.94 89.67 62.44 58.0845 39.09266 47.67584
[2,] 57.81 72.67 82.97 62.44 69.2525 61.28507 65.39835
[3,] 45.66 49.19 53.00 64.39 51.3635 47.17915 48.67584
[4,] 70.39 80.41 89.67 80.00 79.6575 73.77131 76.89140
> 
> summary (rmu1)
Shapley value :
        1         2         3         4 
0.3279994 0.3279994 0.2240002 0.1200010 

Shapley interaction indices :
          1         2         3    4
1        NA 0.3919976 0.1839992 0.08
2 0.3919976        NA 0.1839992 0.08
3 0.1839992 0.1839992        NA 0.08
4 0.0800000 0.0800000 0.0800000   NA

Orness :
0.2222233

Veto indices :
        1         2         3         4 
0.8471095 0.8471095 0.7546657 0.6622220 

Favor indices :
        1         2         3         4 
0.2568897 0.2568897 0.2106679 0.1644460 

Normalized variance :
0.2709092

Normalized entropy :
0.6586446
> summary (rmu2)
Shapley value :
        1         2         3         4 
0.3028481 0.3314557 0.2228481 0.1428481 

Shapley interaction indices :
     1         2         3    4
1   NA 0.0800000 0.0800000 0.08
2 0.08        NA 0.1143551 0.08
3 0.08 0.1143551        NA 0.08
4 0.08 0.0800000 0.0800000   NA

Orness :
0.3571236

Veto indices :
        1         2         3         4 
0.6761999 0.6990889 0.6266838 0.5695332 

Favor indices :
        1         2         3         4 
0.3942643 0.4095188 0.3371137 0.2875976 

Normalized variance :
0.07842338

Normalized entropy :
0.9035183
> 



-- 
View this message in context: http://www.nabble.com/Problem-in-S4-object-displaying-from-within-a-Java-application-using-JRI-tp22776672p22776672.html
Sent from the R help mailing list archive at Nabble.com.




More information about the R-help mailing list