如何使用Rcaller将数据库表从java转换为R?

时间:2016-06-23 10:37:19

标签: java mysql r rcaller

我目前正在使用rcaller进行基于mysql数据库的分析回归。现在我一直坚持如何从Java到R的数据库表。 这就是我的尝试。

Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(DB_URL,USER,PASS);
            stmt = conn.createStatement();
            String sql;
            sql = "SELECT bf,ibt,rate FROM testing";
            ResultSet rs = stmt.executeQuery(sql);
            while(rs.next()){
               float bf  = rs.getFloat("bf");

            }           
            RCaller caller = new RCaller();
            RCode code = new RCode();  
            caller.setRscriptExecutable("C:/Program Files/R/R-2.15.0/bin/Rscript.exe");
            code.clear();
            caller.setRCode(code);

            code.R_require("rpart");          
            code.addRCode("ad.apprentissage= rpart(rate~, data=rs,cp=0.1)"); 
            code.addRCode("predArbreDecision=predict(ad.apprentissage,newdata=rs,type='class') "); 

            File file = code.startPlot();
            code.addRCode("plot(ad.apprentissage)"); 
            caller.runOnly();
            ImageIcon ii = code.getPlot(file);
            code.showPlot(file);

但下面的这一行似乎不起作用:

  code.addRCode("ad.apprentissage= rpart(rate~, data=rs,cp=0.1)"); 

我已经运行了这个程序,没有错误,但输出为空。

1 个答案:

答案 0 :(得分:0)

您可以使用3.0版本的RCaller使用data.frames将数据从Java传递到R.版本3.0 对data.frame对象的支持最少,可以像:

一样使用
Object[][] objects = new Object[][]{{1,2,3}, {"a", "b", "c"}};
String[] names = new String[] {"numbers", "letters"};
DataFrame dataFrame = DataFrame.create(objects, names);

并且类RCode中的方法addDataFrame()可用于将数据从Java传输到R:

RCode rCode = RCode.create();
rCode.addDataFrame("df", dataFrame);

并且此data.frame对象的插槽可在R中访问。例如

rCode.addRCode("mymean <- mean(df$numbers)");

为df中的数字平均值创建一个变量。由于RCaller以有效的方式传递数据帧对象,因此传输数据的成本并不大,特别是对于数据帧。

除此之外,您还可以创建一个直接连接到数据库引擎的R文件,并在R端执行SQL查询。例如,如果您的数据存储在MySQL数据库中,则RMySQL包是一个不错的选择。