티스토리 뷰

순서대로라면  이번엔 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(); 
 }



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


여기까지! ^^