Исключение: «попытка получить доступ к org.rosuda.REngine.REXPGenericVector как String»

1

У меня есть следующая функция для чтения csv (с 18000 строк и 21 столбца) и отображения его содержимого в java-консоли.

public void rFun() {

    Rsession instance = RConnect.getInstance();

    instance.eval("load(\".RData\")");

    instance.eval("g <- read.csv(\"Book2.csv\")");

    REXP x = instance.eval("hh <- head(g,2)");

    REXP x1 = instance.eval("nrow(hh)");
    REXP x2 = instance.eval("ncol(hh)");
    try {


        int i = 0;  
        for(int j=0; j<x1.asInteger(); j++){
                for(int k=0; k<x2.asInteger(); k++){
            System.out.println("Element ["+(j+1)+"]["+(k+1)+"] = "+x.asStrings()[i]);
                i++;
                }
            }

    } catch (REXPMismatchException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

Но когда я выполняю эту функцию, я получаю это исключение: пытаюсь получить доступ к org.rosuda.REngine.REXPGenericVector как String. Этот фрагмент кода работает, если я создаю фрейм данных, как показано ниже:

instance.eval("xyz <- matrix(c(10,20,3,\"A\",40,50,60),nrow=2)");             
REXP x = instance.eval("df <- as.data.frame(xyz)");

Я попытался преобразовать тип данных каждого столбца в символ, а затем получить значение, но при этом генерируется одно и то же исключение. Пожалуйста помоги.

  • 1
    Длинный выстрел, но может ли это быть отсутствие двойного `\` для имен файлов?
  • 0
    Нет. Он правильно читает файл и отображает количество строк / столбцов, а также класс, имена столбцов и т. Д.
Показать ещё 1 комментарий
Теги:
exception
eval

1 ответ

1
Лучший ответ

Используйте следующий синтаксис:

for(int i=1; i<=x1.asInteger(); i++){
    for(int j=1; j<=x2.asInteger(); j++){
                     REXP cls1 = instance.eval("c1 <- h["+i+","+j+"]");
                     System.out.println(cls1.asString());
    }
}

Не нужно преобразовывать тип данных в символ. Надеюсь, поможет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню