본문 바로가기
프로그램/JAVA

[Java 와 R 연재2] rJava 를 사용한 예제

by 구서기 2012. 1. 12.

순서대로라면  이번엔 Java 에서 Rserve 를연동하는 것에 관하여 정리를 하는것이 맞는데, 여러가지 이유로 Rserve는 접고 rJava 를이용한 예제를 하나하나 작성해 보겠다.

혹시라도 이유를 나스스로도 잊을수 가 있으니 여러가지 이유중 기술적인 몇가지 이유만 적어보면

첫째: 연재1에서도 이야기 했듯이 R의 버전과  Rserve버전에 어떤 호환성 연관이 있는지 명확히 기재되어 있는 곳이 없다.제대로 연동되서 사용했던 버전은 R2.4.0 과 Rserve_0.4-3 이었다.

R2.6.0 이었던가 에서는 연동에 오류는 없었지만 결과값이 나타나지 않았다. 어쩌면 내가 제대로 알고있지 못하기 때문일수도 있으니 더 자세한 것을 알아보고 싶다면 아래 링크된곳을 가보면 알 수 있을듯!
http://stats.math.uni-augsburg.de/Rserve/index.shtml

둘째: 다중회귀분석을 위해 독립변수 여러개를 파라메터로 여러개 사용할때 파라메터로 7개 이상은 결과값이 나타나지를 않는다는 점. 이게 제일 큰이유...


그럼 가장 기초적인 예제를 하나 정리해 본다. (주석과 설명은? 생략... ^^)

위의 R 스크립트 코드를 Java에서 JRI를 이용한 소스는 아래와 같다.
[ imsi.java ]

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

public class imsi {  
 public static void main(String[] args) {   
  Rengine engine = new Rengine(null, false, null);
  double data[] = {1.2, 2.3, 4.5,5.5}; 
  long xp = engine.rniPutDoubleArray(data);
  engine.rniAssign("a",xp,0);
  REXP x;
  x = engine.eval("a");
  System.out.println(x);
  engine.end(); 
 }
}

결과화면

우리가 사용하려면 결과값을 변수에 넣고 사용해야겠죠!
그럼 위소스에서 engine.end() 위에 아래코드를 추가해 볼까요!

import org.rosuda.JRI.Rengine;
import org.rosuda.JRI.REXP; 
public class imsi {  
 public static void main(String[] args) {   
  Rengine engine = new Rengine(null, false, null);
  double data[] = {1.2, 2.3, 4.5,5.5}; 
  long xp = engine.rniPutDoubleArray(data);
  engine.rniAssign("a",xp,0);
  REXP x;
  x = engine.eval("a");
  System.out.println(x);
  engine.end(); 
 }



그럼 아래와 같은 결과가 나오죠!


여기까지! ^^