【问题标题】:R connection issues with relative path and executable jar相对路径和可执行 jar 的 R 连接问题
【发布时间】:2026-01-31 20:40:01
【问题描述】:

我正在 IntelliJ IDE 中编写 Java 应用程序。该应用程序使用Rserve() 连接到R 并访问脚本。第一个问题是:目前,我的 R 脚本直接位于我的主要 java 项目文件夹下。要访问R 脚本,我创建了一个RConnection,然后使用以下代码:

RConnection rc1 = new RConnection();
rc1.assign("parseFile", currentPath.concat("/parseFile.R"));
rc1.eval("source(parseFile)");

代码中的currentPath变量是绝对路径,我用这个得到的:

 final String currentPath = currentRelativePath.toAbsolutePath().toString();

但是,我想更改我的代码并希望使用相对路径访问我的R 脚本。为此,我在src 文件夹中创建了一个名为rscripts 的文件夹,并将我的R 脚本放在此文件夹中。然后我使用 intelliJ 中的Mark directory as 选项将此目录标记为Sources root。为了访问脚本,我对代码进行了以下更改:

rc1.assign("parseFile", "/rscripts/parseFile.R");
rc1.eval("source(parseFile)");

但是,现在我得到了错误:

org.rosuda.REngine.Rserve.RserveException: eval failed, request status: error code: 127

看错误,好像是R脚本无法访问。 我应该如何使用相对路径来访问R 脚本?

其次,我想将我的应用程序作为 jar 文件交付。如果用户没有在系统上安装 R,我是否还应该将 Rjar 文件捆绑在一起?

【问题讨论】:

  • 以斜线开头表示绝对路径。我只是将文件内容读取为 Java 中的字符串并进行评估,这样似乎很少会出错

标签: java intellij-idea relative-path executable-jar rserve


【解决方案1】:

我的猜测是您应该使用 setwd() 将您的 R 工作目录更改为正确的位置。在此之后,您只需将文件名传递给 source() 函数即可。

【讨论】: