无法通过Rserve找到功能,但在R中可见

时间:2013-01-16 16:33:40

标签: java r rserve

我正在尝试使用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可见?

史蒂夫

2 个答案:

答案 0 :(得分: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());
}

答案 1 :(得分:0)

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

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

  2. 创建 Rserv.conf 文件并粘贴到该行

    使用R code / filename.R

  3. 的文件的源/路径
  4. 使用命令

    运行R服务

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

  5. 它应该有用......