2015-09-03 2 views
2

Я пишу приложение Java в IntelliJ IDE. Приложение использовало пакет Rserve для подключения к R и выполнения некоторых функций. Когда я хочу, чтобы запустить свой код в первый раз, я должен запустить R в командной строке и запустить Rserve как демон, который выглядит примерно так:Как запустить Rserve автоматически с Java?

R 
library(Rserve) 
Rserve() 

После этого, я могу легко получать доступ к все функции в R без ошибок. Однако, так как этот Java-код будет в комплекте как исполняемый файл, так есть способ, которым Rserve() вызывается автоматически, как только код запускается, поэтому я должен пропустить этот ручной шаг запуска Rserve с помощью командной строки?

ответ

3

Вот код Class я написал, чтобы получить Rserve работая Java

public class InvokeRserve { 
    public static void invoke() { 
     String s; 

     try { 

      // run the Unix ""R CMD RServe --vanilla"" command 
      // using the Runtime exec method: 
      Process p = Runtime.getRuntime().exec("R CMD RServe --vanilla"); 

      BufferedReader stdInput = new BufferedReader(new 
        InputStreamReader(p.getInputStream())); 

      BufferedReader stdError = new BufferedReader(new 
        InputStreamReader(p.getErrorStream())); 

      // read the output from the command 
      System.out.println("Here is the standard output of the command:\n"); 
      while ((s = stdInput.readLine()) != null) { 
       System.out.println(s); 
      } 

      // read any errors from the attempted command 
      System.out.println("Here is the standard error of the command (if any):\n"); 
      while ((s = stdError.readLine()) != null) { 
       System.out.println(s); 
      } 

      // System.exit(0); 

     } 
     catch (IOException e) { 
      System.out.println("exception happened - here's what I know: "); 
      e.printStackTrace(); 
      System.exit(-1); 
     } 
    } 
} 
3

Я знаю, что этот вопрос был задан давно. Думаю, у вас есть ответ. Но ниже ответ может помочь другим. Вот почему я отправляю свой ответ. Ответ: - Вместо того, чтобы снова и снова пустить R-консоль, чтобы запустить Rserve. Одна вещь, которую вы можете сделать, - это написать java-программу для запуска Rserve.

Ниже код, который вы можете использовать в программе java, чтобы запустить Rserve. https://www.sitepoint.com/community/t/call-linux-command-from-java-application/3751. Это ссылка, в которой вы получите код для запуска команды linux из java. Я изменил только команду и разместил ее ниже.

package javaapplication13; 

import java.io.*; 

public class linux_java { 
public static void main(String[] args) { 
try { 
String command ="R CMD Rserve"; 
BufferedWriter out = new BufferedWriter(new FileWriter(
new File(
    "/home/jayshree/Desktop/testqavhourly.tab"), true)); 
final Process process = Runtime.getRuntime().exec(command); 
BufferedReader buf = new BufferedReader(new InputStreamReader(
process.getInputStream())); 
String line; 
while ((line = buf.readLine()) != null) { 
out.write(line); 
    out.newLine(); 
    } 
    buf.close(); 
     out.close(); 
     int returnCode = process.waitFor(); 
     System.out.println("Return code = " + returnCode); 
     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
       } 
      } 
+1

Я попробовал этот код, и это изначально не работает для меня. Затем я понял, что я установил Rstudio Rserve, поэтому «R CMD Rserve» терпел неудачу на консоли. Затем я загрузил двоичный файл с веб-сайта Rserve и установил его с помощью командной строки. Надеюсь, это будет полезно, если кто-то столкнется с той же проблемой. – novicegeek