无法使用Rserve将数据写入csv

无法使用Rserve将数据写入csv,r,rserve,R,Rserve,我能够在Java应用程序中通过Rserve在R脚本中执行远程命令执行和函数调用。但是当我的函数试图使用 write.csv(MyData, file = "MyData.csv") 他们没有生成MyData.csv文件,也没有显示错误。当我在R控制台中执行相同的步骤时,它工作正常 Rserve正在我的本地计算机上运行,我正在使用以下连接和执行: RConnection connection = new RConnection(); connection.eval("makecsv()") p

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

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

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

RConnection connection = new RConnection();
connection.eval("makecsv()")
p、 我省略了上面的“源代码R脚本”步骤

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

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

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

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

以下是两条建议:

  • 首先尝试通过
    connection.eval(parse(“makecsv()”)
  • 通过
    connection.eval(“getwd()”)

  • 您确定检查的目录正确吗?你能从Rserve打印getwd()吗?@Sab:是的,目录是正确的。它看起来很合法,我尝试用异常处理来包装它,但无法生成文件。我并行检查了Rserve,它已经启动并运行,因为我可以通过R控制台进行连接。但感谢您的投入:)令人惊讶的是,这解决了我的问题:D您能告诉我为什么这样做有效,或者为什么我的代码以前不起作用,因为我遵循官方文件的所有内容吗?我很高兴我的建议是有用的。我经常使用Rserve,我想它对工作目录有不同的用法,所以必须使用绝对路径来读写文件。很抱歉,我没有任何官方文件可供分享,只有我的经验。是的,对于R服务来说,这些文件非常有限,很难找到任何细节。谢谢你的意见!工作目录是正确的,解析并没有真正帮助我。不过,感谢您的投入:)