2013-08-08 3 views
1

Я хочу запустить r-script из java. У меня есть следующий код, но дающий null:Java и R bridge

try { 
    RCaller caller = new RCaller(); 
    caller.setRscriptExecutable("C:/Program Files/R/R-3.0.1/bin/x64/Rscript.exe"); 
    caller.cleanRCode();    
    caller.addRCode("k<-1"); //Initializing k to 1 
    caller.addRCode("b<-print(k)"); 
    caller.runAndReturnResult("b"); //This should output the value of b  
} catch(Exception e) { 
    e.printStackTrace(); 
} 

Я не знаю, что я делаю неправильно. Пожалуйста, помогите.

+0

Пожалуйста, сообщите нам точное сообщение об ошибке со стеком, просто скопируйте/вставьте его под код. – piokuc

+0

Он не дает никаких сообщений об ошибке, он не дает никакого вывода, я ожидал «1» в качестве вывода, но вместо этого его пробел. –

+0

Вы сказали «давая нуль». Вы имеете в виду, что 'runAndReturnResult' возвращает null? – keyser

ответ

1

Я предлагаю вам загрузить последнюю версию, 2.1.1. Нижеприведенный код работает как ожидается (отпечатки 1) с версией 2.1.1.

import rcaller.RCaller; 
import rcaller.RCode; 

public class RCallerDemo { 
    public static void main(String[] args) { 
     try { 
      RCaller caller = new RCaller(); 
      caller.setRscriptExecutable("/usr/bin/Rscript"); 
      caller.cleanRCode(); 
      RCode code = new RCode(); 
      final String st1 = "k<-1"; 
      final String st2 = "b<-print(k)"; 
      code.addRCode(st1); 
      code.addRCode(st2); 
      caller.setRCode(code); //Initializing k to 1 
      caller.runAndReturnResult("b"); //This should output the value of b 
      int b = caller.getParser().getAsIntArray("b")[0]; 
      System.out.println(b); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Пример основан на оригинале RCaller examples.

+0

, если k - строковое значение, например k <- "Это строка", как я могу конкатенировать пунктуацию? –

1

Из пути «Программные файлы» я получу работу над Windows. Если да, то есть шанс, что ваша проблема являются косые на пути:

caller.setRscriptExecutable("C:/Program Files/R/R-3.0.1/bin/x64/Rscript.exe"); 

Попробуйте вместо этого:

caller.setRscriptExecutable("C:\\Program Files\\R\\R-3.0.1\\bin\\x64\\Rscript.exe"); 
+0

Спасибо Луис, я изменил косые черты, но он все еще не работает. –

Смежные вопросы