Оценка выражений, вызываемых из Java в R. Ошибка нехватки памяти: куча Java

У меня проблема с загрузкой большого набора данных в R из Java. Проблема на самом деле с функцией, которую я использую: re.eval(), Я хочу загрузить файл в R, чтобы я мог анализировать / манипулировать им в R, однако я хочу сделать это из Java (это для того, чтобы построить графический интерфейс).

Я хочу, чтобы функция выполняла синтаксический анализ и оценку предоставленной мною строки, однако функция 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() может решить проблему, но я не знаю, как это реализовать.

1 ответ

actionPerformed вызывается в стеке событий, и вы должны держать обработку событий короткой. Это тоже может помочь. Вызов:

SwingUtilities.invokeLater(new Runnable() {
    public void run() { ... your code ... }
}

Кроме того, нужно объединить оба выражения eval в R, если нужны только имена столбцов. Может быть, просто прочитать первую строку (по Java?).

Другие вопросы по тегам