2012-05-29 3 views
2

Java에서 R 언어/R 스크립트를 어떻게 호출합니까? 기본적으로 나는 R 스크립트 주위에 자바 종류의 래퍼가 필요하다. 우리가 setDataR (더블 []) 메소드를 가정 해 봅시다 -Java에서 R 언어/스크립트 호출

  1. 는 데이터는 자바 층에해야 차례로 R 스크립트로 전송하는 방법 사항 setData은 (더블 [])라고 주어집니다.

  2. R 스크립트는 몇 가지 계산 방법을 수행합니다. double [] computeR() 메서드를 호출합니다.

  3. Java 프로그램은 double [] getData()를 호출하여 계산 결과를 얻고, 결과는 계산 된 데이터를 얻기 위해 R 스크립트에 위임합니다.

JRI, Rserv, Rcaller는 어떻게 수행 할 수 있습니까? Rscript 메서드를 호출 할 방법이 없습니다. 샘플을 보내주십시오. JNI (java, C++) 호출과 유사해야합니다.

  1. jvm 내에서 여러 스레드가 R 스크립트 호출을 올바르게 호출 할 수 없다고 생각합니까? 어떤 일을해야합니까?

감사

+0

주석을 제거했습니다. – nograpes

답변

0

자바에서 R을 사용하는 가장 간단한 방법은 응답을 잡아 그것을 구문 분석, Runtime.exec("")을 사용하고 있습니다. 여기에서

Process p = Runtime.getRuntime().exec("ls"); 
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream())); 
BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); 

당신이 읽고 stdInput에 버퍼링되는 표준 출력으로 인쇄 결과를 처리 할 수 ​​있습니다 : 기본 지침을 실행하는 방법에 대한 전형적인 예는 것입니다.

+0

이 작업에는 이미 RCaller에서 처리하는 여분의 문자열 구문 분석 프로세스가 필요합니다. – jbytecode

0

RCaller는 사용자가 원하는 것을 정확하게 수행합니다.

double[] a = new double[] {1.0, 2.0, 3.0}; 

으로 정의되고 평균, 중앙값 및 표준 편차 값을 계산하려는 이중 배열 'a'가 있다고 가정합니다. RCaller의 새 인스턴스를 작성하십시오.

RCaller caller = new RCaller(); 
Globals.detect_current_rscript(); 
caller.setRscriptExecutable(Globals.Rscript_current); 

RCode code = new RCode(); 


code.addDoubleMatrix("a", a); 
code.addRCode("s <- list(mean=mean(a), median=median(a), sd=sd(a))"); 

caller.setRCode(code); 

caller.runAndReturnResult("s"); 

double mean = caller.getParser().getAsDoubleArray("mean")[0]; 
double median = caller.getParser().getAsDoubleArray("median")[0]; 
double sd = caller.getParser().getAsDoubleArray("sd")[0]; 

이고 변수 중간 값은 R 스크립트에서 리턴 된 값 2.0을 보유합니다. 자세한 내용은 페이지를 방문