2014-09-08 1 views
2

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

/home/workspace/TestR/test_file 
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) 

Кроме того, код также не печатает никаких заявлений на консоли, которые должны быть напечатаны через R из Rscript. Вот код 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/Main.R')"); 

     REXP valueReturned = c.eval("Main(\""+dirPath+"\")"); 
     //c.eval("Main(\""+dirPath+"\")"); 
     System.out.println(valueReturned.length()); 
    } 

} 

И вот R сценарий:

Main <- function(FILE_PATH) 
{ 
    ## load libraries 
    library(MALDIquant) 
    library(MALDIquantForeign) 
    library(dcemriS4) 
    require(gridExtra) # also loads grid 
    library(lattice) 
    library(fields) 
    library(matlab) 
    library(rJava) 

    #Call the source files of the function which this script will use 
    source('/home/workspace/TestR/importAnalyzeFormat.R', echo=TRUE) 
    source('/home/workspace/TestR/exportFile.R', echo=TRUE) 
    source('/home/workspace/TestR/readRecalibratedSpectra.R', echo=TRUE) 

    spectralDataObjects <- importAnalyzeFormat(FILE_PATH) 

    p <- detectPeaks(spectralDataObjects, method="MAD", halfWindowSize=1, SNR=1) 

    # Assign the p to preprocessedDataObjects 
    preprocessedDataObjects<-p 

    dir.create("PreprocessedSpectra", showWarnings = FALSE) 
    setwd("PreprocessedSpectra") 

    for(i in 1:length(preprocessedDataObjects)) 
    { 
    coordinateValue<-metaData(preprocessedDataObjects[[i]]) 
    coordinates<-coordinateValue$imaging$pos 
    mzValues<-mass(preprocessedDataObjects[[i]]) 
    intensityValues<-intensity(preprocessedDataObjects[[i]]) 
    exportFile(coordinates,mzValues,intensityValues) 
    } 

    print("Files exported. Program will now terminate") 
    print("############################################################") 

    return(preprocessedDataObjects) 
} 

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

ответ

0

У вас есть ошибка в вашем скрипте, значение 127 означает, что существует исключение синтаксического анализа.

Если вы используете что-то подобное, оно распечатает ошибку в скрипте.

c является связующим звеном в этом случае.

c.assign(".tmp.", myCode); 
    REXP r = c.parseAndEval("try(eval(parse(text=.tmp.)),silent=TRUE)"); 
    if (r.inherits("try-error")) System.err.println("Error: "+r.toString()) 
    else { // success .. } 
0

Код ошибки 127 означает исключение синтаксического анализа.

Изменить строку:

c.eval ("источник ('/ дом/рабочее пространство/TestR/Main.R')");

в

c.eval ("источник (\"/дом/рабочее пространство/TestR/Main.R \ ")");

Теперь это должно сработать.