Java から R に大きなデータセットをロードする際に問題があります。問題は、実際に私が使用している関数にあります: re.eval(). ファイルをRにロードしてRで分析/操作できるようにしたいのですが、これをJavaから行いたいです(これはGUIを構築するためです)。
関数に実行させたいのは、提供した文字列を解析して評価することですが、 eval 関数は結果を解析、評価して返します。ヒープ サイズに関して Java からメモリ不足エラーが発生します。これは私が現時点で持っているコードです:
JButton getFile = new JButton("Load");
getFile.setBounds(316, 10, 151, 23);
getFile.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
REXP x;
getFileName();
if (dataFilePath != null){
String file = dataFilePath.replace("\\", "\\\\\\\\");
re.eval("data<-read.csv(file='"+file+"', head=TRUE, sep='|')");
x = re.eval("names(data)");
String[] column_names = x.asStringArray();
originalDataLength = column_names.length;
for (int i = 0; i < column_names.length; i++) {
comboBox.insertItemAt(column_names[i], 0);
}
textField.setText("Data Loaded");
}
}
}
);
このコードは、13500x220 のデータフレームで作業していたときに機能しました。新しいデータフレームは 50000x700 です。上記のコードで正確に何が起こっているのかも疑問に思っていましたか? R で作成され、Java に送り返されます (つまり、複製されますか?)。
ヘルプ/コメントをいただければ幸いです。また、Rosuda Rengine クラスの説明と利用可能な機能も調べました。問題を解決できるかもしれないと思っていrniEval()ましたが、実装方法がわかりません。