Forum

Nome Utente:
Password:
Riconoscimi automaticamente
 Tutti i Forum
 MolecularLab
 Bioinformatica
 sotware R: valori di matrice null
 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi Aggiungi ai Preferiti Aggiungi ai Preferiti
Cerca nelle discussioni
I seguenti utenti stanno leggendo questo Forum Qui c'è:

Aggiungi Tag Aggiungi i tag

Quanto è utile/interessante questa discussione:

Autore Discussione  

antonellaInf
Nuovo Arrivato



4 Messaggi

Inserito il - 04 settembre 2008 : 12:33:21  Mostra Profilo  Visita l'Homepage di antonellaInf Invia a antonellaInf un Messaggio Privato  Rispondi Quotando
ciao a tutti,sto lavorando su un progetto che richiede di usare il software statistico R. Mi trovo a dover usare rJava per richiamare un programma java da questo ambiente; la classe che invoco mi crea una matrice termine-documento.
il codice che uso è questo:

.jinit(parameters=c("-Xmx1024m"))
.jinit(classpath = "C:\\thesis.jar")
.jaddClassPath("C:\\Documents and Settings\\ADAMS\\workspace1\\PROJECT\\bin")
.jaddClassPath("C:\\plugins")
.jaddClassPath("C:\\plugins\\lucene-core-2.3.2.jar")
.jaddClassPath("C:\\plugins\\lucene-snowball-2.3.0.jar")
.jconstructors("org.rJava/TbDManagement")
a <- .jnew("org.rJava/TbDManagement")
.jmethods(a)
matrix <- .jcall(a, "[[B", "createTbDMatrix")
matrix<-as.matrix(matrix)
matrix

ora il problema è che se stampo a video il risultato della classe java da eclipse, la frequenza dei termini in ogni documento viene visualizzata in modo corretto, quando invece richiamo l'oggetto da R tramite il comando "matrix" al posto del valore della frequanza mi viene fuori un punto interrogativo. Premettendo che è la prima volta che uso R, qualcuno potrebbe dirmi a cosa è dovuto questo problema e magari saprebbe darmi anche una mano a trovare una soluzione?

data
Nuovo Arrivato

airplane_canvas

Prov.: Torino
Città: Torino


89 Messaggi

Inserito il - 04 settembre 2008 : 14:07:16  Mostra Profilo  Visita l'Homepage di data  Invia a data un messaggio ICQ  Clicca per vedere l'indirizzo MSN di data Invia a data un Messaggio Privato  Rispondi Quotando
Mi sa che ti saro` poco utile (non ho capito se solo le frequenze sono sbagliate, se fosse cosi` penserei a problemi di locale differente ma non ho trovato niente su google) anche perche` non ho ancora mai usato rjava, ma magari a r non piace leggere direttamente raw byte con as.matrix...forse serve prima qualcosa tipo http://wiki.r-project.org/rwiki/doku.php?id=rdoc:base:readbin

http://www.medito.eu.org/vodka/odierno
Torna all'inizio della Pagina

antonellaInf
Nuovo Arrivato



4 Messaggi

Inserito il - 04 settembre 2008 : 14:18:18  Mostra Profilo  Visita l'Homepage di antonellaInf Invia a antonellaInf un Messaggio Privato  Rispondi Quotando
ciao,
prima di tutto ti ringrazio per avermi risposto.
cn as.matrix forzo l'oggetto java a diventare una matrice, mentre per leggerlo uso il comando matrix <- .jcall(a, "[[B", "createTbDMatrix")
per cui non credo sia un problema di lettura, anche perchè mi sono accorta che nonostante la dimensione reale della matrice sia 6086x40650 , quando in R uso il comando dim(matrix) il risultato è 40650x1. sono giorni che ci sbatto la testa, ma non riesco a capire quale potrebbe essere il problema
Torna all'inizio della Pagina

data
Nuovo Arrivato

airplane_canvas

Prov.: Torino
Città: Torino


89 Messaggi

Inserito il - 04 settembre 2008 : 14:32:14  Mostra Profilo  Visita l'Homepage di data  Invia a data un messaggio ICQ  Clicca per vedere l'indirizzo MSN di data Invia a data un Messaggio Privato  Rispondi Quotando
Quello che mi perplime e` che [[B dovrebbe dire che il metodo a.createTbDMatrix torna un array 2d di raw byte, se ho letto bene...questo potrebbe essere un problema per as.matrix che a quanto mi dicono altri R espertosi qui si aspetta i dati gia` formattati come matrice.

http://www.medito.eu.org/vodka/odierno
Torna all'inizio della Pagina

antonellaInf
Nuovo Arrivato



4 Messaggi

Inserito il - 04 settembre 2008 : 14:44:08  Mostra Profilo  Visita l'Homepage di antonellaInf Invia a antonellaInf un Messaggio Privato  Rispondi Quotando
hai perfettamente ragione! il metodo createTbDMatrix restituisce un array di byte a due dimensioni. Ho fatto stamapare in un file .txt la matrice e poi l'ho passata ad R tramite il comando read.table() Il problema però è che quando chiedo la dimensione, mi dice che la matrice letta ha una sola righa, per cui il prblema rimane.
Torna all'inizio della Pagina

antonellaInf
Nuovo Arrivato



4 Messaggi

Inserito il - 04 settembre 2008 : 14:47:47  Mostra Profilo  Visita l'Homepage di antonellaInf Invia a antonellaInf un Messaggio Privato  Rispondi Quotando
inserisco il codece della classe java, magari può aiutarvi a capirci qualcosa in più.

public class TbDManagement {
public static void main(String[] args) {
TbDManagement p = new TbDManagement();
p.createTbDMatrix();
}
public byte[][] createTbDMatrix(){
byte[][] termByDocumentMatrix = null;
String index = "C:/TESI/IndexLucene";

try {
IndexReader reader = IndexReader.open(index);

for(int j=0;j<reader.maxDoc();j++){
System.out.println(reader.document(j).getField("title").toString());
Field name=reader.document(j).getField("title");
}

int numDocs = reader.maxDoc();
SortedSet<String> vocabulary = new TreeSet<String>();
for (int i = 0; i < numDocs; i++) {
// prendo i termini dell'i-esimo documento
String[] terms = reader.getTermFreqVectors(i)[0].getTerms();

// li inserisco nel vocabolario
for (int k = 0; k < terms.length; k++) {
vocabulary.add(terms[k]);
//System.out.println(terms[k]);
}
}
Object[] vocArray = vocabulary.toArray();
Arrays.sort(vocArray);

int numTerms = vocabulary.size();
System.out.println(numDocs+ " X " + numTerms);

termByDocumentMatrix = new byte[numTerms][numDocs];

for (int i = 0; i < numDocs; i++) {
//System.out.println((i+1)+ " di " + numDocs);

// prendo i termini dell'i-esimo documento
String[] terms = reader.getTermFreqVectors(i)[0].getTerms();

// prendo le occorrenze dei termini
int[] freqs = reader.getTermFreqVectors(i)[0].getTermFrequencies();

// li inserisco nella matrice
for (int k = 0; k < terms.length; k++) {
int rowTerm = Arrays.binarySearch(vocArray, terms[k]);
termByDocumentMatrix[rowTerm][i] = (byte) freqs[k];
//termByDocumentMatrix[rowTerm][i] = (int) freqs[k];
}
}

// Scrivo su file
FileWriter fileWriter = new FileWriter("C:/TESI/matrix.txt");
for (int i = 0; i < numTerms; i++) {
fileWriter.write(vocArray[i] + ";");
for (int j = 0; j < numDocs; j++) {
fileWriter.write(termByDocumentMatrix[i][j] + ";");
}
fileWriter.write("\n");
}

fileWriter.close();

System.out.println(termByDocumentMatrix.length + " " + termByDocumentMatrix[0].length );
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}

return termByDocumentMatrix;

}
}
Torna all'inizio della Pagina
  Discussione  

Quanto è utile/interessante questa discussione:

 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi Aggiungi ai Preferiti Aggiungi ai Preferiti
Cerca nelle discussioni
Vai a:
MolecularLab.it © 2003-18 MolecularLab.it Torna all'inizio della Pagina