无法使用 Rserve 将数据写入 csv

Unable to write data to csv using Rserve

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

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

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

Rserve 运行在我的本地机器上,我正在使用以下连接和执行:

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

p.s。我省略了上面的 "source the R script" 步骤

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

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

可能你必须使用绝对路径,像这样:

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. 将字符串解析为表达式
  3. 通过connection.eval("getwd()")
  4. 检查工作目录