프로그램/JAVA
[Java 와 R 연재2] rJava 를 사용한 예제
구서기
2012. 1. 12. 18:26
순서대로라면 이번엔 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(); }
그럼 아래와 같은 결과가 나오죠!
여기까지! ^^