【问题标题】:JRI: how to get the console output in a Java StringJRI:如何在 Java 字符串中获取控制台输出
【发布时间】:2015-02-26 13:30:38
【问题描述】:

我在我的 Java 程序中声明 JRI 引擎如下:

REngine eng = REngine.engineForClass("org.rosuda.REngine.JRI.JRIEngine", 
    args, new REngineStdOutput(), false);

这很好,但是我想在 Java 字符串而不是 Java 控制台中获取控制台输出。

我研究了REngineStdOutput,但找不到太多。有任何想法吗?

【问题讨论】:

    标签: rjava jri


    【解决方案1】:

    您必须实现 org.rosuda.JRI.RMainLoopCallbacks 接口 - 特别是 rWriteConsole() 将与每个输出字符串一起调用。

    【讨论】:

      【解决方案2】:

      Bellow 是如何将 R 输出显示为 Java 的示例。你基本上必须实现RMainLoopCallbacks

      import org.rosuda.JRI.RMainLoopCallbacks;
      import org.rosuda.JRI.Rengine;
      import java.util.logging.Logger;
      
      public class Runner {
      
          private static Logger log = Logger.getLogger("Runner");
      
          static class LoggingConsole implements RMainLoopCallbacks {
              private Logger log;
      
              LoggingConsole(Logger log) {
                  this.log = log;
              }
      
              public void rWriteConsole(Rengine re, String text, int oType) {
                  log.info(String.format("rWriteConsole: %s", text));
              }
      
              public void rBusy(Rengine re, int which) {
                  log.info(String.format("rBusy: %s", which));
              }
      
              public void rShowMessage(Rengine re, String message) {
                  log.info(String.format("rShowMessage: %s",  message));
              }
      
              public String rReadConsole(Rengine re, String prompt, int addToHistory) {
                  return null;
              }
      
              public String rChooseFile(Rengine re, int newFile) {
                  return null;
              }
      
              public void rFlushConsole(Rengine re) {
              }
      
              public void rLoadHistory(Rengine re, String filename) {
              }
      
              public void rSaveHistory(Rengine re, String filename) {
              }
          }
      
          Rengine engine = new Rengine(new String[] {"--no-save"}, false, new LoggingConsole(log));
          ...
          // Use the engine somewhere to evaluate a R method and see the output
          engine.eval("library(caret)");
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-21
        • 2015-03-09
        • 2011-05-16
        • 2011-03-09
        • 1970-01-01
        • 2013-10-30
        • 1970-01-01
        相关资源
        最近更新 更多