【发布时间】:2012-10-26 14:57:17
【问题描述】:
我正在为一个项目使用 Java/R/Rserve。我面临将多维数组从 Java 传输到 R 工作区进行计算的问题。到目前为止,RConnection 对象的assign 方法只允许传递以下内容:byte[], double[], int[], REXP, String,and String[]。
我通过在 Java 中创建一个循环来回避这个问题,并单独传递变量。尽管这可行,但它看起来丑陋且效率低下。
RConnection c = new RConnection();
c.eval("x <- matrix(0,nrow=dimX[1],ncol=dimX[2])");
for (int i = 0; i < dimX[0]; i++){
c.assign("i",Integer.toString(i+1));
c.eval("i <- as.numeric(i)");
for (int j = 0; j < dimX[1]; j++){
c.assign("j",Integer.toString(j+1));
c.eval("j <- as.numeric(j)");
c.assign("tmp", Double.toString(XOBS[i][j]));
c.eval("x[i,j] <- as.numeric(tmp)");
}
}
http://www.rforge.net/Rserve/dist/JRclient/JavaDoc/org/rosuda/JRclient/REXP.html 上的 Rserve 文档似乎已过时,Rserve 的示例相当有限。谁能给我一个关于如何改进这段代码的建议?
谢谢
【问题讨论】:
-
您的数据有多大?虽然,我不确定可能的精度损失,一种方法是将您的数据逐行转储到字符串中并在 R 中使用
rbind调用eval,另一种方法是将所有Java数据转储到文件中并在 R 中执行read.table。