Package org.rosuda.JRI

Examples of org.rosuda.JRI.Rengine


      final PeakIntegrationMethod integrationMethod) {

    LOG.finest("Detecting peaks.");

    // Get R engine.
    final Rengine rEngine;
    try {
      rEngine = RUtilities.getREngine();
    } catch (Throwable t) {
      throw new IllegalStateException(
          "XCMS requires R but it couldn't be loaded ("
              + t.getMessage() + ')');
    }

    final double[][] peaks;
    synchronized (RUtilities.R_SEMAPHORE) {

      // Load XCMS library.
      if (rEngine.eval("require(xcms)").asBool().isFALSE()) {

        throw new IllegalStateException(
            "The \"xcms\" R package couldn't be loaded - is it installed in R?");
      }

      // Check version of XCMS.
      if (rEngine
          .eval("packageVersion('xcms') >= '" + XCMS_VERSION + '\'')
          .asBool().isFALSE()) {

        throw new IllegalStateException(
            "An old version of the XCMS package is installed in R - please update XCMS to version "
                + XCMS_VERSION + " or later");
      }

      // Set vectors.
      rEngine.assign("scantime", scanTime);
      rEngine.assign("intensity", intensity);

      // Initialize.
      rEngine.eval("mz <- " + mz, false);
      rEngine.eval("numPoints <- length(intensity)", false);

      // Construct xcmsRaw object
      rEngine.eval("xRaw <- new(\"xcmsRaw\")", false);
      rEngine.eval("xRaw@tic <- intensity", false);
      rEngine.eval("xRaw@scantime <- scantime * " + SECONDS_PER_MINUTE,
          false);
      rEngine.eval("xRaw@scanindex <- 1:numPoints", false);
      rEngine.eval("xRaw@env$mz <- rep(mz, numPoints)", false);
      rEngine.eval("xRaw@env$intensity <- intensity", false);

      // Construct ROIs.
      rEngine.eval("ROIs <- list()", false);
      int roi = 1;
      for (int start = 0; start < intensity.length; start++) {

        // Found non-zero section.
        if (intensity[start] > 0.0) {

          // Look for end.
          int end = start + 1;
          while (end < intensity.length && intensity[end] > 0.0) {

            end++;
          }

          // Add ROI to list.
          rEngine.eval("ROIs[[" + roi + "]] <- list('scmin'="
              + (start + 1) + ", 'scmax'=" + end
              + ", 'mzmin'=mz, 'mzmax'=mz)", false);

          // Next ROI.
          start = end;
          roi++;

        }
      }

      // Do peak picking.
      final REXP centWave = roi <= 1
          ? null
          : rEngine
              .eval("findPeaks.centWave(xRaw, ppm=0, mzdiff=0, verbose=TRUE"
                  + ", peakwidth=c("
                  + peakWidth.getMin()
                  * SECONDS_PER_MINUTE
                  + ", "
View Full Code Here


              "Could not start R. Please check if R is installed and path to the "
                  + "libraries is set properly in the startMZmine script.");
        }

        LOG.finest("Creating R Engine.");
        rEngine = new Rengine(new String[]{"--vanilla"}, false,
            new LoggerConsole());

        LOG.finest("Rengine created, waiting for R.");
        if (!rEngine.waitForR()) {
          throw new IllegalStateException("Could not start R");
View Full Code Here

      setStatus(TaskStatus.ERROR);
      errorMessage = "The data for heat map is empty.";
      return;
    }

    Rengine rEngine = null;
    try {
      rEngine = RUtilities.getREngine();
    } catch (Throwable t) {
      setStatus(TaskStatus.ERROR);
      errorMessage = "Heat map requires R but it could not be loaded ("
          + t.getMessage() + ')';
      return;
    }

    finishedPercentage = 0.3f;

    synchronized (RUtilities.R_SEMAPHORE) {

      // Load gplots library
      if (rEngine.eval("require(gplots)").asBool().isFALSE()) {
        setStatus(TaskStatus.ERROR);
        errorMessage = "Heap maps plot requires the \"gplots\" R package, which could not be loaded. Please add it to your R installation.";
      }

      try {

        if (outputType.contains("png")) {
          if (height < 500 || width < 500) {

            setStatus(TaskStatus.ERROR);
            errorMessage = "Figure height or width is too small. Minimun height and width is 500.";
            return;
          }
        }

        rEngine.eval("dataset<- matrix(\"\",nrow ="
            + newPeakList[0].length + ",ncol=" + newPeakList.length
            + ")");

        if (plegend) {
          rEngine.eval("stars<- matrix(\"\",nrow ="
              + newPeakList[0].length + ",ncol="
              + newPeakList.length + ")");
        }

        // assing the values to the matrix
        for (int row = 0; row < newPeakList[0].length; row++) {

          for (int column = 0; column < newPeakList.length; column++) {

            int r = row + 1;
            int c = column + 1;

            double value = newPeakList[column][row];

            if (plegend) {
              String pValue = pValueMatrix[column][row];
              rEngine.eval("stars[" + r + "," + c + "] = \""
                  + pValue + "\"");
            }

            if (!Double.isInfinite(value) && !Double.isNaN(value)) {

              rEngine.eval("dataset[" + r + "," + c + "] = "
                  + value);
            } else {

              rEngine.eval("dataset[" + r + "," + c + "] = NA");
            }
          }
        }
        finishedPercentage = 0.4f;

        rEngine.eval("dataset <- apply(dataset, 2, as.numeric)");

        // Assign row names to the data set
        long rows = rEngine.rniPutStringArray(rowNames);
        rEngine.rniAssign("rowNames", rows, 0);
        rEngine.eval("rownames(dataset)<-rowNames");

        // Assign column names to the data set
        long columns = rEngine.rniPutStringArray(colNames);
        rEngine.rniAssign("colNames", columns, 0);
        rEngine.eval("colnames(dataset)<-colNames");

        finishedPercentage = 0.5f;

        // Remove the rows with too many NA's. The distances between
        // rows can't be calculated if the rows don't have
        // at least one sample in common.
        rEngine.eval(" d <- as.matrix(dist(dataset))");
        rEngine.eval("d[upper.tri(d)] <- 0");
        rEngine.eval("dataset <- dataset[-na.action(na.omit(d)),]");

        finishedPercentage = 0.8f;

        String marginParameter = "margins = c(" + columnMargin + ","
            + rowMargin + ")";
        rEngine.eval(
            "br<-c(seq(from=min(dataset,na.rm=T),to=0,length.out=256),seq(from=0,to=max(dataset,na.rm=T),length.out=256))",
            false);

        // Possible output file types
        if (outputType.contains("pdf")) {

          rEngine.eval("pdf(\"" + outputFile + "\", height=" + height
              + ", width=" + width + ")");
        } else if (outputType.contains("fig")) {

          rEngine.eval("xfig(\"" + outputFile + "\", height="
              + height + ", width=" + width
              + ", horizontal = FALSE, pointsize = 12)");
        } else if (outputType.contains("svg")) {

          // Load RSvgDevice library
          if (rEngine.eval("require(RSvgDevice)").asBool().isFALSE()) {

            throw new IllegalStateException(
                "The \"RSvgDevice\" R package couldn't be loaded - is it installed in R?");
          }

          rEngine.eval("devSVG(\"" + outputFile + "\", height="
              + height + ", width=" + width + ")");
        } else if (outputType.contains("png")) {

          rEngine.eval("png(\"" + outputFile + "\", height=" + height
              + ", width=" + width + ")");
        }

        if (plegend) {

          rEngine.eval(
              "heatmap.2(dataset,"
                  + marginParameter
                  + ", trace=\"none\", col=bluered(length(br)-1), breaks=br, cellnote=stars, notecol=\"black\", notecex="
                  + starSize + ", na.color=\"grey\")", false);
        } else {

          rEngine.eval(
              "heatmap.2(dataset,"
                  + marginParameter
                  + ", trace=\"none\", col=bluered(length(br)-1), breaks=br, na.color=\"grey\")",
              false);
        }

        rEngine.eval("dev.off()", false);
        finishedPercentage = 1.0f;

      } catch (Throwable t) {

        throw new IllegalStateException(
View Full Code Here

        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;
        }

    /* High-level API - do not use RNI methods unless there is no other way
      to accomplish what you want */
    try {
      REXP x;
      re.eval("data(iris)",false);
      System.out.println(x=re.eval("iris"));
      // generic vectors are RVector to accomodate names
      RVector v = x.asVector();
      if (v.getNames()!=null) {
        System.out.println("has names:");
        for (Enumeration e = v.getNames().elements() ; e.hasMoreElements() ;) {
          System.out.println(e.nextElement());
        }
      }
      // for compatibility with Rserve we allow casting of vectors to lists
      RList vl = x.asList();
      String[] k = vl.keys();
      if (k!=null) {
        System.out.println("and once again from the list:");
        int i=0; while (i<k.length) System.out.println(k[i++]);
      }     

      // get boolean array
      System.out.println(x=re.eval("iris[[1]]>mean(iris[[1]])"));
      // R knows about TRUE/FALSE/NA, so we cannot use boolean[] this way
      // instead, we use int[] which is more convenient (and what R uses internally anyway)
      int[] bi = x.asIntArray();
      {
          int i = 0; while (i<bi.length) { System.out.print(bi[i]==0?"F ":(bi[i]==1?"T ":"NA ")); i++; }
          System.out.println("");
      }
     
      // push a boolean array
      boolean by[] = { true, false, false };
      re.assign("bool", by);
      System.out.println(x=re.eval("bool"));
      // asBool returns the first element of the array as RBool
      // (mostly useful for boolean arrays of the length 1). is should return true
      System.out.println("isTRUE? "+x.asBool().isTRUE());

      // now for a real dotted-pair list:
      System.out.println(x=re.eval("pairlist(a=1,b='foo',c=1:5)"));
      RList l = x.asList();
      if (l!=null) {
        int i=0;
        String [] a = l.keys();
        System.out.println("Keys:");
        while (i<a.length) System.out.println(a[i++]);
        System.out.println("Contents:");
        i=0;
        while (i<a.length) System.out.println(l.at(i++));
      }
      System.out.println(re.eval("sqrt(36)"));
    } catch (Exception e) {
      System.out.println("EX:"+e);
      e.printStackTrace();
    }
   
    // Part 2 - low-level API - for illustration purposes only!
    //System.exit(0);
   
        // simple assignment like a<-"hello" (env=0 means use R_GlobalEnv)
        long xp1 = re.rniPutString("hello");
        re.rniAssign("a", xp1, 0);

        // Example: how to create a named list or data.frame
        double da[] = {1.2, 2.3, 4.5};
        double db[] = {1.4, 2.6, 4.2};
        long xp3 = re.rniPutDoubleArray(da);
        long xp4 = re.rniPutDoubleArray(db);
       
        // now build a list (generic vector is how that's called in R)
        long la[] = {xp3, xp4};
        long xp5 = re.rniPutVector(la);

        // now let's add names
        String sa[] = {"a","b"};
        long xp2 = re.rniPutStringArray(sa);
        re.rniSetAttr(xp5, "names", xp2);

        // ok, we have a proper list now
        // we could use assign and then eval "b<-data.frame(b)", but for now let's build it by hand:      
        String rn[] = {"1", "2", "3"};
        long xp7 = re.rniPutStringArray(rn);
        re.rniSetAttr(xp5, "row.names", xp7);
       
        long xp6 = re.rniPutString("data.frame");
        re.rniSetAttr(xp5, "class", xp6);
       
        // assign the whole thing to the "b" variable
        re.rniAssign("b", xp5, 0);
       
        {
            System.out.println("Parsing");
            long e=re.rniParse("data(iris)", 1);
            System.out.println("Result = "+e+", running eval");
            long r=re.rniEval(e, 0);
            System.out.println("Result = "+r+", building REXP");
            REXP x=new REXP(re, r);
            System.out.println("REXP result = "+x);
        }
        {
            System.out.println("Parsing");
            long e=re.rniParse("iris", 1);
            System.out.println("Result = "+e+", running eval");
            long r=re.rniEval(e, 0);
            System.out.println("Result = "+r+", building REXP");
            REXP x=new REXP(re, r);
            System.out.println("REXP result = "+x);
        }
        {
            System.out.println("Parsing");
            long e=re.rniParse("names(iris)", 1);
            System.out.println("Result = "+e+", running eval");
            long r=re.rniEval(e, 0);
            System.out.println("Result = "+r+", building REXP");
            REXP x=new REXP(re, r);
            System.out.println("REXP result = "+x);
            String s[]=x.asStringArray();
            if (s!=null) {
                int i=0; while (i<s.length) { System.out.println("["+i+"] \""+s[i]+"\""); i++; }
            }
        }
        {
            System.out.println("Parsing");
            long e=re.rniParse("rnorm(10)", 1);
            System.out.println("Result = "+e+", running eval");
            long r=re.rniEval(e, 0);
            System.out.println("Result = "+r+", building REXP");
            REXP x=new REXP(re, r);
            System.out.println("REXP result = "+x);
            double d[]=x.asDoubleArray();
            if (d!=null) {
                int i=0; while (i<d.length) { System.out.print(((i==0)?"":", ")+d[i]); i++; }
                System.out.println("");
            }
            System.out.println("");
        }
        {
            REXP x=re.eval("1:10");
            System.out.println("REXP result = "+x);
            int d[]=x.asIntArray();
            if (d!=null) {
                int i=0; while (i<d.length) { System.out.print(((i==0)?"":", ")+d[i]); i++; }
                System.out.println("");
            }
        }

        re.eval("print(1:10/3)");
       
  if (true) {
      // so far we used R as a computational slave without REPL
      // now we start the loop, so the user can use the console
      System.out.println("Now the console is yours ... have fun");
      re.startMainLoop();
  } else {
      re.end();
      System.out.println("end");
  }
    }
View Full Code Here

TOP

Related Classes of org.rosuda.JRI.Rengine

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.