맨 처음 Rserve를 설치한다.
받은 파일을 
C:\Program Files\R\R-3.4.4\library  
에 넣어주기 위해 다운받은 경로로 간다.
(C:\Users\hong\AppData\Local\Temp\RtmpgVjMXI\downloaded_packages 등)






위에 다운 받은 경로로 이동하여 압축파일을 사용하기 좋은 위치에 복사한다.



바탕화면이 좋아서 바탕화면에 옮겨놨다.








압축을 해제하고 나온 파일을 

C:\Program Files\R\R-3.4.4\library 
로 옮긴다.










C:\Program Files\R\R-3.4.4\bin\x64
로 가서 안에 있는 모든 dll파일을 복사한다.










복사한 dll파일을
C:\Program Files\R\R-3.4.4\library\Rserve\libs\x64
에 붙여넣기 한다.




이제 Rserve.exe를 실행하는데 문제가 없을 것이다.





관리자 권한으로 Rserve.exe를 실행시킨다.



실행이 된 것을 확인하고 아래 샘플 코드를 이용하여 그래프를 출력해본다.




샘플코드

====================JAVA====================
package practice;

import org.rosuda.REngine.REXP;
import org.rosuda.REngine.REXPMismatchException;
import org.rosuda.REngine.REngineException;
import org.rosuda.REngine.Rserve.RConnection;
import org.rosuda.REngine.Rserve.RserveException;

public class rJava_Con {

public RConnection r = null;
public REXP x = null;
public String retStr = "";

public rJava_Con() throws RserveException {
this.r = new RConnection();

}

public byte[] returnRImg() throws REngineException, REXPMismatchException {

String device = "jpeg";
x = r.parseAndEval("try(" + device + "('test.jpg',quality=90))");
System.out.println("1");

// ok, so the device should be fine - let's plot - replace this by any plotting
// code you desire ...

r.parseAndEval("x <- mtcars$mpg ");
System.out.println("2");

r.parseAndEval("h<-hist(x, breaks=10, col=\"red\", xlab=\"Miles Per Gallon\", main=\"Histogram with Normal Curve\")");
System.out.println("3");

r.parseAndEval("xfit<-seq(min(x),max(x),length=40)");
System.out.println("4");

r.parseAndEval("yfit<-dnorm(xfit,mean=mean(x),sd=sd(x))");
System.out.println("5");

r.parseAndEval("yfit <- yfit*diff(h$mids[1:2])*length(x)");
System.out.println("6");

r.parseAndEval("lines(xfit, yfit, col=\"blue\", lwd=2)");
System.out.println("7");


// graphics off
r.parseAndEval("graphics.off()");
System.out.println("8");


// There is no I/O API in REngine because it's actually more efficient to use R
// for this
// we limit the file size to 1MB which should be sufficient and we delete the
// file as well
x = r.parseAndEval("r=readBin('test.jpg','raw',1024*1024); unlink('test.jpg'); r");
System.out.println("9");


return x.asBytes();// img;
}
}
============================================




====================JSP====================
<%@page import="practice.rJava_Con"%>
<%@ page import="com.sun.org.apache.xml.internal.security.utils.Base64"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Test!</h1>
<%
rJava_Con con = new rJava_Con();
%>
<img src="data:image/jpg;base64, <%=Base64.encode(con.returnRImg())%>" />

</body>
</html>
===========================================







ref.
갈대적 속성의 ITer / Rserve를 이용한 JSP 페이지 그래프(히스토그램)출력


+ Recent posts