2013-06-21 2 views
0

Я получил следующий код из следующего подключения веб-моста между R и Java с использованием RcallerОшибка под мостом между R и Java

http://www.mhsatman.com/rcaller.php

Запуск под Netbeans IDE на Windows, показывает следующее предупреждение:

   Note:C:\Users\aman\Documents\NetBeansProjects\JavaApplicationRCaller\src\javaapplicationrcaller\JavaApplicationRCaller.java uses or overrides a deprecated API. 
       Note: Recompile with -Xlint:deprecation for details. 

Но это также показывает, что это и не печатает результаты, т.е.

rcaller.exception.RCallerExecutionException: Can not run C:\Program Files\R\R- 
    3.0.1\bin\i386\Rscript. Reason: java.io.IOException: Cannot run program           
    "C:\Program": CreateProcess error=2, The system cannot find the file specified 

Это RScript исполняемый код путь:
C: \ Program Files \ R \ R-3.0.1 \ Bin \ i386 \ Rscript

package javaapplicationexample; 
    import rcaller.RCaller; 
    import java.util.Random; 

    public class JavaApplicationExample { 

public static void main(String[] args) { 

    new JavaApplicationExample(); 
} 

public JavaApplicationExample(){ 
    try{ 
     /* 
     * Creating Java's random number generator 
     */ 
     Random random = new Random(); 

     /* 
     * Creating RCaller 
     */ 
     RCaller caller = new RCaller(); 

     /* 
     * Full path of the Rscript. Rscript is an executable file shipped with R. 
     * It is something like C:\\Program File\\R\\bin.... in Windows 
     */ 
     // It is showing the same error when writing Rscript.exe here 
     caller.setRscriptExecutable("C:\\Program Files\\R\\R-3.0.1\\bin\\i386\\Rscript"); 

     /* We are creating a random data from a normal distribution 
     * with zero mean and unit variance with size of 100 
     */ 
     double[] data = new double[100]; 
     for (int i=0;i<data.length;i++){ 
      data[i] = random.nextGaussian(); 
     } 

     /* 
     * We are transferring the double array to R 
     */ 
     caller.addDoubleArray("x", data); 

     /* 
     * Adding R Code 
     */ 
     caller.addRCode("my.mean<-mean(x)"); 
     caller.addRCode("my.var<-var(x)"); 
     caller.addRCode("my.sd<-sd(x)"); 
     caller.addRCode("my.min<-min(x)"); 
     caller.addRCode("my.max<-max(x)"); 
     caller.addRCode("my.standardized<-scale(x)"); 

     /* 
     * Combining all of them in a single list() object 
     */ 
     caller.addRCode("my.all<-list(mean=my.mean, variance=my.var, sd=my.sd, min=my.min, max=my.max, std=my.standardized)"); 

     /* 
     * We want to handle the list 'my.all' 
     */ 
     caller.runAndReturnResult("my.all"); 

     double[] results; 

     /* 
     * Retrieving the 'mean' element of list 'my.all' 
     */ 
     results = caller.getParser().getAsDoubleArray("mean"); 
     System.out.println("Mean is "+results[0]); 

     /* 
     * Retrieving the 'variance' element of list 'my.all' 
     */ 
     results = caller.getParser().getAsDoubleArray("variance"); 
     System.out.println("Variance is "+results[0]); 

     /* 
     * Retrieving the 'sd' element of list 'my.all' 
     */ 
     results = caller.getParser().getAsDoubleArray("sd"); 
     System.out.println("Standard deviation is "+results[0]); 

     /* 
     * Retrieving the 'min' element of list 'my.all' 
     */ 
     results = caller.getParser().getAsDoubleArray("min"); 
     System.out.println("Minimum is "+results[0]); 

     /* 
     * Retrieving the 'max' element of list 'my.all' 
     */ 
     results = caller.getParser().getAsDoubleArray("max"); 
     System.out.println("Maximum is "+results[0]); 

     /* 
     * Retrieving the 'std' element of list 'my.all' 
     */ 
     results = caller.getParser().getAsDoubleArray("std"); 

     /* 
     * Now we are retrieving the standardized form of vector x 
     */ 
     System.out.println("Standardized x is "); 
     for (int i=0;i<results.length;i++) System.out.print(results[i]+", "); 
    }catch(Exception e){ 
     System.out.println(e.toString()); 
    } 
} 


    } 

ответ

1

В связи с вашей ошибкой, это вызвано пробелом на пути к исполняемому R. Вы могли бы попытаться избежать пространство (caller.setRscriptExecutable("C:\\Program\ Files\\R\\R-3.0.1\\bin\\i386\\Rscript"); (обратите внимание на дополнительные \ перед пространством). Или вы можете просто переустановить R на пути, который не включает в себя пространство (например, c:\\R). Это последнее решение является наиболее надежным.

+0

Хорошо, спасибо большое :) ... Теперь он показывает эту ошибку после запуска: [Fatal Error] Routput7539616899024923580: 1: 1: Преждевременный конец файла. –

+0

Эй, паул, я задал свой вопрос 11 часов назад, у меня нет ответа на мой вопрос, и я не могу поднять свой вопрос как новый, его теперь тоже по списку, пожалуйста, помогите мне здесь. Скажите мне, когда вы это видели, я удалит этот комментарий. http://stackoverflow.com/questions/17220399/cannot-instantiate-a-class-using-a-button –

+0

Я решил ошибку, используя и установив следующее (я должен упомянуть это здесь для других): install.packages («Runiversal», repos = «http://cran.r-project.org»), а затем install.packages («Runiversal») :) :) –

2

Это окончательный ответ: я решил ошибку при использовании и установке следующего (я должен упомянуть его здесь для других):

install.packages("Runiversal",repos="cran.r-project.org") 

, а затем:

install.packages("Runiversal") 
0

RCaller 2.2 не требует проблем Runiversal упаковка. Посетите запись в блоге для получения более подробной информации here.