如何使用 Rcaller 将数据库 table 从 java 转移到 R?
How take database table from java to R using Rcaller?
我目前正在使用 rcaller 基于 mysql 数据库进行分析回归。现在我一直在研究如何将数据库 table 从 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 将数据从 Java 传递到 R 使用 data.frames。版本 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);
和 class 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 是一个不错的选择。
我目前正在使用 rcaller 基于 mysql 数据库进行分析回归。现在我一直在研究如何将数据库 table 从 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 将数据从 Java 传递到 R 使用 data.frames。版本 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);
和 class 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 是一个不错的选择。