2011-09-19 1 views
4

Je souhaite que R produise, par exemple, des données normales, puis utilise ces données en Java. Je sais qu'il existe une fonction pour convertir un objet REXP en un tableau mais cela ne semble pas fonctionner. Voici ce que j'ai:Conversion d'un objet REXP en double matrice (Java/R)

REXP x; 
x = re.eval("rnorm(100,50,10)"); 
double[] test = x.asDoubleArray(); 
System.out.println(x); 
System.out.println(test); 

J'ai imprimé les deux pour voir ce qui ne va pas. Les résultats sont les suivants:

[REAL* (61.739814266023316, 40.25177570831545, 36.09450830843867, 48.06821029847672,...etc)] 
[[email protected] 

Le problème est de savoir comment R renvoie les résultats à Java; il dit à java ce que x est, s'ils étaient des chaînes, il dirait [String * (.. .. peu importe ..)]. Je veux juste ce qui est dans le support. De plus, la ligne renvoyée est une chaîne quelle qu'elle soit.

Je vais travailler avec de grandes données, donc je veux que ce soit rapide. J'avais essayé d'utiliser des sous-ensembles, en extrayant ce qui est dans les parenthèses et en les analysant en double, mais il doit y avoir une meilleure solution. Aussi cela ne semble pas fonctionner pour les données avec plus de 100 points.

+0

Désolé de ne pas tenir compte ....... pas attention –

Répondre

1

Comme il y a déjà une référence à cette question, laissez ici être une réponse:

System.out.println(test);test est double[] signifie littéralement System.out.println(test.toString());

Le problème est, en Java, les tableaux ont obtenu une mise en œuvre très mauvaise toString(). Par conséquent, afin d'obtenir le résultat dont vous avez besoin, vous devez utiliser

REXP x; 
x = re.eval("rnorm(100,50,10)"); 
double[] test = x.asDoubleArray(); 
System.out.println(x); 
System.out.println(Arrays.asList(test)); // note we get an array-backed list here 

que les listes ont une bonne méthode toString().

Encore une fois, mes excuses pour une réponse évidente.