【问题标题】:Unable to write data to csv using Rserve无法使用 Rserve 将数据写入 csv
【发布时间】:2018-01-22 12:57:07
【问题描述】:

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

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

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

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

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

附言我省略了上面的“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)
}

【问题讨论】:

  • 您确定您检查的是正确的目录吗?你能从 Rserve 打印 getwd() 吗?
  • @Sab : 是的,目录是正确的。

标签: r rserve


【解决方案1】:

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

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

【讨论】:

  • 令人惊讶的是,这解决了我的问题 :D 你能告诉我为什么这行得通,或者为什么我的代码以前没有工作,因为我按照官方文档的所有内容进行操作?
  • 我很高兴我的建议很有用。我经常使用 Rserve,我想它对工作目录的使用不同,所以你必须使用绝对路径来读写文件。很抱歉,我没有任何官方文档可以分享,只是我的经验。
  • 是的,rserve 的文档非常有限,很难找到任何详细信息。不过感谢您的投入!
【解决方案2】:

如果您的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

【讨论】:

  • 看起来很合法,我尝试用异常处理包装它,无法生成文件。我并行检查了 Rserve,它已启动并正在运行,因为我能够通过 R 控制台进行连接。但是感谢您的投入:)
【解决方案3】:

这里有 2 条建议:

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

【讨论】:

  • 工作目录是正确的,解析并没有真正帮助我。感谢您的投入 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多