Как запустить Rserve автоматически из Java?

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

R
library(Rserve)
Rserve()

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


person novicegeek    schedule 03.09.2015    source источник


Ответы (2)


Вот код для 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);
        }
    }
}
person novicegeek    schedule 19.04.2016

Я знаю, что этот вопрос задавали давно. Я думаю, у тебя есть ответ. Но приведенный ниже ответ может помочь другим. Вот почему я публикую свой ответ. ответ: - Вместо того, чтобы снова и снова заходить в консоль 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();
        }
              }
           }
person Jaishree Rout    schedule 24.11.2015
comment
Я попробовал этот код, и сначала он у меня не работал. Затем я понял, что установил с помощью Rstudio Rserve, и поэтому R CMD Rserve не работает на консоли. Затем я загрузил двоичный файл с веб-сайта Rserve и установил его с помощью командной строки. Надеюсь, это будет полезно, если кто-то столкнется с той же проблемой. - person novicegeek; 19.04.2016