2014-09-08 1 views
0

Я использую Rserve для доступа к скрипту R через мой проект Java. Код java запрашивает ввод пользователя для ввода местоположения файла и сохраняет его в переменной String. Затем эта переменная переходит к функции R, которая должна читать местоположение файла. Но при этом я получаю следующее сообщение об ошибке:Как передать путь к файлу Rscript, который вызывается в Java, используя Rserve?

Exception in thread "main" org.rosuda.REngine.Rserve.RserveException: eval failed, request status: error code: 127 
at org.rosuda.REngine.Rserve.RConnection.eval(RConnection.java:234) 
at testMain.main(testMain.java:23) 

Вот мой Java код:

import java.util.Scanner; 

import org.rosuda.REngine.REXP; 
import org.rosuda.REngine.REXPMismatchException; 
import org.rosuda.REngine.REngineException; 
import org.rosuda.REngine.Rserve.RConnection; 
import org.rosuda.REngine.Rserve.RserveException; 

public class testMain { 
    static String dirPath; 
    public static void main(String[] args) throws REXPMismatchException, REngineException   
{ 

     // For user input 
     Scanner scanner = new Scanner(System.in); 
     System.out.println("Enter the file path: "); 

     dirPath = scanner.nextLine(); 

     RConnection c = new RConnection(); 
     // source the Palindrome function 
     c.eval("source('/home/workspace/TestR/testMain.R')"); 

     REXP valueReturned = c.eval("testMain(dirPath)"); 
     System.out.println(valueReturned.asString()); 
    } 
} 

Вот моя R функция:

testMain <- function(dirPath) 
{ 
    p<-dirPath 
    return(p) 
} 

Может кто-то пожалуйста, помогите мне, как решить это?

ответ

1

Вероятно, что-то, как это будет работать:

REXP valueReturned = c.eval("testMain(\""+dirPath+"\")"); 

Проблема заключается в том -I think-, что вы не установили переменную dirPath для контекста R, прежде чем ссылаться на него.

+0

Отлично! Это сработало. – novicegeek

+0

@ gábor-bakos Почему Rserve перестает работать и бросает мне «Сброс соединения» при запуске этого кода? Мой R-код в точности похож на тот, который есть, с той разницей, что я поставляю CSV-файл и заставляю его читать data.frame Java 'dirPath' is' 'C: \\ users \\ documents \\ some.csv "' и R код 'testMain <- функция (dirPath) { р <-dirPath возврата (р) } read.csv (dirPath, stringsAsFactors = FALSE)' – sunitprasad1

+0

@ sunitprasad1 Ваш R код мне не подходит. Вы пробовали его в консоли R? (Это хорошая идея задать такие вопросы как отдельные вопросы, вы получите больше внимания таким образом. [Ask]) –