我正在尝试使用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可见?
史蒂夫
答案 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时调用(在同一个过程中),采取的步骤:
使用您的R代码(函数等)创建文件并将其命名为例如 filename.R
创建 Rserv.conf 文件并粘贴到该行
使用R code / filename.R
使用命令
运行R服务Rserve(debug = TRUE,args =&#39; - no-save --RS-conf / Rserv文件的路径/ Rserv.conf&#39;)
它应该有用......