0

我正在尝试使用 Java 客户端进行服务。我在 R 中定义了一个函数,如下所示:

bar <- function(x) { x+1 }

在 R 中执行这个会给出以下(预期的)输出:

> bar(1)
[1] 2

但是,执行以下 Java 代码:

public static void main(String[] args) throws REXPMismatchException, REngineException {
  RConnection c = new RConnection();
  REXP x = c.eval("try({bar(1)}, silent=TRUE)");
  System.out.println(x.asString());

}

给出以下输出:

Error in try({ : could not find function "bar"

在 R 控制台内,输出以下消息:

> Error: could not find function "bar"

我需要做些什么来使我的功能对 Rserve 可见吗?

史蒂夫

4

2 回答 2

0

您正在不同的工作区/流程中定义您的功能。Rserve 和 R 不共享相同的进程空间,因此将您的方法声明为一个不会使其出现在 Rserve 工作区中。

public static void main(String[] args) throws REXPMismatchException, REngineException {
  RConnection c = new RConnection();
  REXP x = c.eval("try({bar <- function(x) { x+1 }; bar(1)}, silent=TRUE)");
  System.out.println(x.asString());
}
于 2013-08-21T17:32:22.840 回答
0

我有类似的问题,您需要将 R 代码存储在 Rserve 启动时调用的文件中(在同一进程中),要采取的步骤:

  1. 使用您的 R 代码(函数等...)创建文件并将其命名为例如filename.R

  2. 创建Rserv.conf文件并粘贴到那里

    带有 R 代码/文件名.R 的文件的源/路径

  3. 使用命令运行 R serve

    Rserve(debug = TRUE, args='--no-save --RS-conf /Rserv 文件的路径/Rserv.conf')

它应该工作......

于 2017-01-25T13:48:50.740 回答