Невозможно записать данные в 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 предложения:
- Попробуйте сначала разобрать строку в выражении
connection.eval(parse("makecsv()"))
- Проверьте рабочий каталог по
connection.eval("getwd()")