我已经使用 JRI 开发了 Java 代码,用于在 Java 上执行 R 代码。现在,我遇到了一个问题(在数据框的列中提取不同的值),我必须使用 R 的 sqldf 包并尝试在我的 Java 代码中使用它的功能。这是示例代码(橙色是默认情况下已经存在于 R 中的数据集):
public class RCode2 {
public static JRIEngine re;
private static org.rosuda.REngine.REXP rexp;
public RCode2()
{
try {
re = new JRIEngine(new String [] {"--vanilla"});
} catch (REngineException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Rengine created, waiting for R");
}
public static void main(String[] args) {
RCode2 rCode2= new RCode2();
rCode2.testSqldf();
re.close();
}
public void testSqldf(){
rexp=re.parseAndEval("library(sqldf,lib.loc=\"C:/Program Files/R/R-"+"2.15.0/library\")\n");
System.out.println(rexp.isNull());
rexp=re.parseAndEval("dframe<-sqldf(\"select * from Orange\")");
System.out.println(rexp.isNull());
}
}
上述代码的输出是:
Rengine created, waiting for R
true
true
这意味着“dframe”不包含任何内容。但是当我尝试在 R 上运行相同的 sqldf func: sqldf("select * from Orange") 时,它给了我 35 行。如何在 java 中使用 sqldf 函数以获得想要的结果?
我的环境变量设置如下:
R_HOME=C:\Program Files\R\R-2.15.0
R_LIBS=C:\Program Files\R\R-2.15.0\library
R_LIBS_USER=C:\Program Files\R\R-2.15.0\library
Path=C:\Program Files\R\R-2.15.0\bin\i386;C:\Program Files\R\R-2.15.0\library\rJava\jri