java - 如何使用 Rcaller 将数据库表从 java 转移到 R?

标签 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)"); 

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

最佳答案

您可以使用 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 是一个不错的选择。

关于java - 如何使用 Rcaller 将数据库表从 java 转移到 R?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37989226/

相关文章:

java - 字符替换(不使用替换)

maven - 使用 JRE 1.5,Maven 仍然表示 -source 1.3 中不支持注释

java - startswith vs JSON 反序列化性能?

mysql - Rails 数据库连接池的工作原理

r - 在 R 中的同一个图表上绘制多列

R 线性混合效应 - 查找个体固定效应方差(以%为单位)

java - 如何使我的 View 高度减半?

cs-cart中的mysql查询

mysql - 延迟作业 - rake 作业 :clear causes "Can' t connect to local MySQL server through socket '/tmp/mysql.sock' (2)

sql - 如何根据时间戳和值查找同步ID