2010-02-01 20 views
13

Jaki jest najlepszy sposób wywołania funkcji R z poziomu Javy?R z poziomu Java

Poszukuję szybkiego, łatwego i niezawodnego sposobu tworzenia standardowych wykresów rozproszenia 2d i histogramów w R przy użyciu aplikacji Java. Zastanawiałem się, które pakiety/interfejsy, które pojawiły się w szybkim wyszukiwaniu Google, będą najbardziej wygodne w użyciu.

Czekam z niecierpliwością na Twoje sugestie!

+4

Duplikat: http://stackoverflow.com/questions/1136709/extend-my-java-application-with-r – Shane

Odpowiedz

15

Użyj JRI: http://www.rforge.net/JRI/. Jest dostarczany w pakiecie z rJava, w tym kilka przykładów użycia.

bardzo prosty przykład byłoby tak:

import java.io.*; 
import java.awt.Frame; 
import java.util.Enumeration; 

import org.rosuda.JRI.Rengine; 
import org.rosuda.JRI.REXP; 
import org.rosuda.JRI.RVector; 
import org.rosuda.JRI.RMainLoopCallbacks; 

public class rJavaTest { 

    public static void main(String[] args) { 

     Rengine re=new Rengine(args, false, new TextConsole()); 
     REXP x; 
     re.eval("print(1:10/3)"); 
     System.out.println(x=re.eval("iris")); 
     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()); 
      } 
     } 

     if (true) { 
      System.out.println("Now the console is yours ... have fun"); 
      re.startMainLoop(); 
     } else { 
      re.end(); 
      System.out.println("end"); 
     } 
    } 
} 
+6

skąd otrzymałeś TextConsole(), którą przekazałeś jako parametr do Rengine? Nie mogę skompilować tego programu z tego powodu. –

+0

Nie uważam, że niekompletny przykład (bez wymaganych instrukcji 'import') powinien zostać wybrany jako zaakceptowana odpowiedź. @Shane: jeśli możesz, wypełnij luki w podanym przykładzie. – Giupo

+0

JRI ma podkatalog "examples", w którym można zobaczyć pełniejsze przykłady. W 'rtest.java' znajdziesz powyższe z wieloma dodatkowymi rzeczami, a także znajdziesz brakujące' klasy TextConsole implementuje RMainLoopCallbacks {...} ' – RolandASc

3

I stwierdzono, że rozwidlone R jako proces mocowania strumieni standardowe wejście, wyjście i StdErr tego procesu oraz wysyłania R poleceń przez strumień wejściowy być całkiem skutecznym. Używam systemu plików do komunikacji między R i moim procesem Java. W ten sposób mogę uruchamiać wiele procesów R z różnych wątków w Javie, a ich środowiska nie są ze sobą w konflikcie.

+2

Możesz mieć wiele instancji JRI działających w oddzielnych wątkach i nie będzie żadnych konflikt. – Shane

4

Jest coś nowego o nazwie http://www.renjin.org/

Jedno lubię go JRI jest wdrożenie, ile jri wymaga, że ​​użytkownicy aplikacji pobierze R, renjin nie robi, i wykorzystuje tylko JVM uruchomić.

Powiązane problemy