1

我有这个 R 脚本:

palindrome <- function(p) {
  for(i in 1:floor(nchar(p)/2) ) {
    r <- nchar(p) - i + 1
    if ( substr(p, i, i) != substr(p, r, r) ) return(FALSE) 
  }
  return(TRUE)
}

我使用以下代码从 Java 调用:

connection.serverSource("C:\\Users\\x\\Desktop\\R Script\\Palindrome.R");

连接类型为 RConnection,创建如下:

public void startConnection() {
        PATH_TO_R = SystemUtils.IS_OS_UNIX ? "R" : "C:\\Program Files\\R\\R-3.6.1\\bin\\x64\\R.exe";    
        try {
            String cmd = PATH_TO_R + " -e " + "\"library(Rserve);Rserve(port=" + 6311+ ")\"";
            Runtime.getRuntime().exec(cmd);
            RConnection connection = new RConnection("localhost", 6311);
        } catch (IOException | RserveException e) {
            e.printStackTrace();
        }
}

问题是我抛出了这个错误并且不知道如何解决它:

org.rosuda.REngine.Rserve.RserveException: serverSource failed, request status: control pipe to master process is closed/broken

任何帮助都感激不尽!

4

1 回答 1

0

函数 serverSource(就像 serverEval 和 serverShutdown 一样)直接作用于主 R+Rserve 进程,该功能默认关闭。您可以在 /etc/Rserv.conf 添加行control enabled配置参考)启用它。

如果您还没有使用 Rserve 配置文件,您可以简单地在默认位置 /etc/Rserv.conf (linux/macOS) 中创建它,或者在任何地方(也包括 windows)创建它并在启动 Rserve 时将位置作为参数传递:R CMD Rserve --RS-conf <your path here>页面底部的命令行参数)。

于 2020-07-23T17:45:35.487 回答