无法使用Rserve将数据写入csv

时间:2018-01-22 12:57:08

标签: r rserve

我能够通过我的Java应用程序中的Rserve在R脚本中执行远程命令执行和函数调用。但是当我的函数试图使用

在csv文件中保存数据帧时
write.csv(MyData, file = "MyData.csv")

他们没有生成MyData.csv文件,也没有显示错误。当我在R控制台中执行相同的步骤时,它工作正常。

Rserve正在我的本地计算机上运行,​​我正在使用以下内容来连接和执行:

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

P.S。我省略了上面的“源R脚本”步骤

仅供参考,这是我正在尝试运行的Dummy R脚本:

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

3 个答案:

答案 0 :(得分:1)

可能你必须使用绝对路径,如下所示:

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

答案 1 :(得分:0)

如果你的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 :(得分:0)

以下是2条建议:

  1. 尝试先通过connection.eval(parse("makecsv()"))
  2. 将字符串解析为表达式
  3. connection.eval("getwd()")
  4. 检查工作目录