Java で R コードを実行するために、JRI を使用して Java コードを開発しました。今、私は 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