Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente bannato
    Registrato dal
    Jul 2006
    Messaggi
    54

    Classe Jri Importarla

    Ciao a tutti

    ho JRI(vari file makefile,java file etc) in una cartella JRI

    Devo importarla all'interno di un mio progetto in modo da poter richiamare le funzioni contenute in questa classe.

    Qualcuno sa come si fa?

    Sareste cosi gentili da farmi un esempio di codice(possibilmente funzionante) in cui avete improtato questa classe e riuscite a usarla?

    Se volete vi mando il rar della cartella che contiene JRI!!!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    1) Assicurati che il package (se hai fatto un package) o la directory che contiene le classi sia elencata nel CLASSPATH o sia una sottodirectory di quella dove stai sviluppando la tua applicazione.

    2) Scrivi, all'inizio del file Java che deve usare la libreria, import nomepackage.*


    Ora puoi usare tutte le classi del package nomepackage (non quelle degli eventuali sottopackage, che richiedono, ciascuno un import).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente bannato
    Registrato dal
    Jul 2006
    Messaggi
    54

    .

    L'errore sembra essere generato da cio

    The declared package does not match the expected package!!!

    Questo lavoro lo sto facendo per un amica quindi per ora mi sono limitato a creare il progetto come esterno e prendendo dentro tutti i file della cartella JRI


    QUESTO è IL CODICE:

    import java.io.*;
    import java.awt.Frame;
    import java.awt.FileDialog;

    import java.util.Enumeration;


    //QUESTI ME LI DA ROSSIIIIIIIIIIIII


    import org.rosuda.JRI.Rengine;
    import org.rosuda.JRI.REXP;
    import org.rosuda.JRI.RList;
    import org.rosuda.JRI.RVector;
    import org.rosuda.JRI.RMainLoopCallbacks;

    class TextConsole implements RMainLoopCallbacks
    {
    public void rWriteConsole(Rengine re, String text) {
    System.out.print(text);
    }

    public void rBusy(Rengine re, int which) {
    System.out.println("rBusy("+which+")");
    }

    public String rReadConsole(Rengine re, String prompt, int addToHistory) {
    System.out.print(prompt);
    try {
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    String s=br.readLine();
    return (s==null||s.length()==0)?s:s+"\n";
    } catch (Exception e) {
    System.out.println("jriReadConsole exception: "+e.getMessage());
    }
    return null;
    }

    public void rShowMessage(Rengine re, String message) {
    System.out.println("rShowMessage \""+message+"\"");
    }

    public String rChooseFile(Rengine re, int newFile) {
    FileDialog fd = new FileDialog(new Frame(), (newFile==0)?"Select a file":"Select a new file", (newFile==0)?FileDialog.LOAD:FileDialog.SAVE);
    fd.show();
    String res=null;
    if (fd.getDirectory()!=null) res=fd.getDirectory();
    if (fd.getFile()!=null) res=(res==null)?fd.getFile()res+fd.getFile());
    return res;
    }

    public void rFlushConsole (Rengine re) {
    }

    public void rLoadHistory (Rengine re, String filename) {
    }

    public void rSaveHistory (Rengine re, String filename) {
    }
    }

    public class rtest {
    public static void main(String[] args) {
    // just making sure we have the right version of everything
    if (!Rengine.versionCheck()) {
    System.err.println("** Version mismatch - Java files don't match library version.");
    System.exit(1);
    }
    System.out.println("Creating Rengine (with arguments)");
    // 1) we pass the arguments from the command line
    // 2) we won't use the main loop at first, we'll start it later
    // (that's the "false" as second argument)
    // 3) the callbacks are implemented by the TextConsole class above
    Rengine re=new Rengine(args, false, new TextConsole());
    System.out.println("Rengine created, waiting for R");
    // the engine creates R is a new thread, so we should wait until it's ready
    if (!re.waitForR()) {
    System.out.println("Cannot load R");
    return;
    }

    /* High-level API - do not use RNI methods unless there is no other way
    to accomplish what you want */
    try {
    REXP x;
    re.eval("data(iris)",false);
    System.out.println(x=re.eval("iris"));
    // generic vectors are RVector to accomodate names
    RVector v = x.asVector();
    if (v.getNames()!=null) {
    System.out.println("has names:");
    for (Enumeration e = v.getNames().elements() ; e.hasMoreElements() {
    System.out.println(e.nextElement());
    }
    }
    // for compatibility with Rserve we allow casting of vectors to lists
    RList vl = x.asList();
    String[] k = vl.keys();
    if (k!=null) {
    System.out.println("and once again from the list:");
    int i=0; while (i<k.length) System.out.println(k[i++]);
    }

    // get boolean array
    System.out.println(x=re.eval("iris[[1]]>mean(iris[[1]])"));
    // R knows about TRUE/FALSE/NA, so we cannot use boolean[] this way
    // instead, we use int[] which is more convenient (and what R uses internally anyway)
    int[] bi = x.asIntArray();
    {
    int i = 0; while (i<bi.length) { System.out.print(bi[i]==0?"F "bi[i]==1?"T ":"NA ")); i++; }
    System.out.println("");
    }

    // push a boolean array
    boolean by[] = { true, false, false };
    re.assign("bool", by);
    System.out.println(x=re.eval("bool"));
    // asBool returns the first element of the array as RBool
    // (mostly useful for boolean arrays of the length 1). is should return true
    System.out.println("isTRUE? "+x.asBool().isTRUE());

    // now for a real dotted-pair list:
    System.out.println(x=re.eval("pairlist(a=1,b='foo' ,c=1:5)"));
    RList l = x.asList();
    if (l!=null) {
    int i=0;
    String [] a = l.keys();
    System.out.println("Keys:");
    while (i<a.length) System.out.println(a[i++]);
    System.out.println("Contents:");
    i=0;
    while (i<a.length) System.out.println(l.at(i++));
    }
    System.out.println(re.eval("sqrt(36)"));
    } catch (Exception e) {
    System.out.println("EX:"+e);
    e.printStackTrace();
    }

    // Part 2 - low-level API - for illustration purposes only!
    //System.exit(0);

    // simple assignment like a<-"hello" (env=0 means use R_GlobalEnv)
    long xp1 = re.rniPutString("hello");
    re.rniAssign("a", xp1, 0);

    // Example: how to create a named list or data.frame
    double da[] = {1.2, 2.3, 4.5};
    double db[] = {1.4, 2.6, 4.2};
    long xp3 = re.rniPutDoubleArray(da);
    long xp4 = re.rniPutDoubleArray(db);

    // now build a list (generic vector is how that's called in R)
    long la[] = {xp3, xp4};
    long xp5 = re.rniPutVector(la);

    // now let's add names
    String sa[] = {"a","b"};
    long xp2 = re.rniPutStringArray(sa);
    re.rniSetAttr(xp5, "names", xp2);

    // ok, we have a proper list now
    // we could use assign and then eval "b<-data.frame(b)", but for now let's build it by hand:
    String rn[] = {"1", "2", "3"};
    long xp7 = re.rniPutStringArray(rn);
    re.rniSetAttr(xp5, "row.names", xp7);

    long xp6 = re.rniPutString("data.frame");
    re.rniSetAttr(xp5, "class", xp6);

    // assign the whole thing to the "b" variable
    re.rniAssign("b", xp5, 0);

    {
    System.out.println("Parsing");
    long e=re.rniParse("data(iris)", 1);
    System.out.println("Result = "+e+", running eval");
    long r=re.rniEval(e, 0);
    System.out.println("Result = "+r+", building REXP");
    REXP x=new REXP(re, r);
    System.out.println("REXP result = "+x);
    }
    {
    System.out.println("Parsing");
    long e=re.rniParse("iris", 1);
    System.out.println("Result = "+e+", running eval");
    long r=re.rniEval(e, 0);
    System.out.println("Result = "+r+", building REXP");
    REXP x=new REXP(re, r);
    System.out.println("REXP result = "+x);
    }
    {
    System.out.println("Parsing");
    long e=re.rniParse("names(iris)", 1);
    System.out.println("Result = "+e+", running eval");
    long r=re.rniEval(e, 0);
    System.out.println("Result = "+r+", building REXP");
    REXP x=new REXP(re, r);
    System.out.println("REXP result = "+x);
    String s[]=x.asStringArray();
    if (s!=null) {
    int i=0; while (i<s.length) { System.out.println("["+i+"] \""+s[i]+"\""); i++; }
    }
    }
    {
    System.out.println("Parsing");
    long e=re.rniParse("rnorm(10)", 1);
    System.out.println("Result = "+e+", running eval");
    long r=re.rniEval(e, 0);
    System.out.println("Result = "+r+", building REXP");
    REXP x=new REXP(re, r);
    System.out.println("REXP result = "+x);
    double d[]=x.asDoubleArray();
    if (d!=null) {
    int i=0; while (i<d.length) { System.out.print(((i==0)?"":", ")+d[i]); i++; }
    System.out.println("");
    }
    System.out.println("");
    }
    {
    REXP x=re.eval("1:10");
    System.out.println("REXP result = "+x);
    int d[]=x.asIntArray();
    if (d!=null) {
    int i=0; while (i<d.length) { System.out.print(((i==0)?"":", ")+d[i]); i++; }
    System.out.println("");
    }
    }

    re.eval("print(1:10/3)");

    if (true) {
    // so far we used R as a computational slave without REPL
    // now we start the loop, so the user can use the console
    System.out.println("Now the console is yours ... have fun");
    re.startMainLoop();
    } else {
    re.end();
    System.out.println("end");
    }
    }
    }

  4. #4
    Originariamente inviato da N4PoLeOnE
    L'errore sembra essere generato da cio

    The declared package does not match the expected package!!!
    ...
    ...

    //QUESTI ME LI DA ROSSIIIIIIIIIIIII


    import org.rosuda.JRI.Rengine;
    import org.rosuda.JRI.REXP;
    import org.rosuda.JRI.RList;
    import org.rosuda.JRI.RVector;
    import org.rosuda.JRI.RMainLoopCallbacks;
    Mi sembra che ci siano almeno un paio di problemi:

    1. Il percorso del file contenente la classe non corrisponde al package. Ad esempio, se il package si chiama test.jri, il file deve trovarsi nella cartella test/jri;

    2. Gli import in rosso probabilmente indicano il fatto che il classpath non comprende le librerie (jar) contenenti quei package.

    Ciao,

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.