Невозможно записать данные в CSV с помощью Rserve

Я могу выполнять удаленное выполнение команд и вызов функций в R-скрипте через Rserve в моем Java-приложении. Но когда моя функция пытается сохранить кадр данных в CSV-файл, используя

write.csv(MyData, file = "MyData.csv")

Они MyData.csv файл не генерируется, и не отображается ошибка. когда я выполняю те же шаги в консоли R, он работает нормально.

Rserve работает на моем локальном компьютере, и я использую следующее для подключения и выполнения:

RConnection connection = new RConnection();
connection.eval("makecsv()")

ps я пропустил шаг "source the R script" выше

Просто для справки: это мой скрипт Dummy R, который я пытаюсь запустить:

makecsv <- function(){
        x<-rnorm(10)
        y<-rnorm(10)
        df1<-data.frame(x,y)
        write.csv(df1, file = "MyData.csv")
        return(df1)
}

3 ответа

Решение

Вероятно, вы должны использовать абсолютный путь, что-то вроде этого:

write.csv(MyData, file = "/var/MyData.csv")

Это может произойти, если ваш Rserve мертв. Упаковка в try-catch с правильной обработкой ошибок может помочь в отладке.

Эта версия работает для меня:

import org.rosuda.REngine.*;
import org.rosuda.REngine.Rserve.*;

public class Main {
    public static void main(String[] args) {
        try {
            RConnection c = new RConnection();

            org.rosuda.REngine.REXP getwd = c.eval("getwd()");
            System.out.println(getwd.asString());

            c.eval("source(\"main.R\")");
            c.eval("makecsv()");
            c.close();
        } catch (REngineException | REXPMismatchException e) {
            e.printStackTrace();
        }
    }
}

Выход:

C:/Users/moon/Documents

Process finished with exit code 0

И в Documents папка у меня есть MyData.csv,

Вот 2 предложения:

  1. Попробуйте сначала разобрать строку в выражении connection.eval(parse("makecsv()"))
  2. Проверьте рабочий каталог по connection.eval("getwd()")
Другие вопросы по тегам