In meiner Java-Klasse Ich schreibe 3 Test funktioniert wie folgt:rjava: pass 2-dimensionale String-Array als Funktionseingang
public void try2dStringArray(String[][] arr) {
System.out.println(arr.length);
}
public void try1dStringArray(String[] arr) {
System.out.println(arr.length);
}
public void try2dDoubleArray(double[][] arr) {
System.out.println(arr.length);
}
In R Teil I laufen die folgenden:
library(rJava)
.jinit('/path/to/my/jar/app.jar')
obj <- .jnew('somepackage.Someclass')
doubleMatrix <- rbind(c(1,2), c(3,4))
stringMatrix <- rbind(c('a', 'b'), c('c', 'd'))
stringArray <- c('a', 'b')
result <- .jcall(obj,"V","try1dStringArray",
.jarray(stringArray, dispatch = T))
result <- .jcall(obj,"V","try2dDoubleArray",
.jarray(doubleMatrix, dispatch = T))
result <- .jcall(obj,"V","try2dStringArray",
.jarray(stringMatrix, dispatch = T))
nur die letzte ein Fehler heraus:
Error in .jcall(obj, "V", "try2dStringArray", .jarray(stringMatrix, dispatch = T)) :
method try2dStringArray with signature ([[Ljava.lang.String;)V not found
Wie aus double[][]
in diesem Fall String[][]
anders ist und wie kann ich f ix es?
Does '.jarray (lapply (gilt (stringMatrix, 1, Funktion (x) lapply (x, .jnew, class = "java/lang/String")), jarray)) '' Erzeuge ein 'String [] []' Java-Objekt, das für deine Methode geeignet ist? – nicola
@nicola Es scheint nicht zu funktionieren: 'Fehler in .jcall (obj," V "," try2dStringArray ", .jarray (lapply (apply (stringMatrix,: Methode try2dStringArray mit Signatur ([Ljava/lang/Object;) V not found' – Bamqf
Es scheint, dass Sie 'Object [] []' anstelle von 'String [] []' erhalten haben. Ich habe das Dokument von '.jarray' angeschaut und vielleicht wird das Argument' contents.class' gelöst : '.jarray (apply (stringMatrix, 1, .jarray), contents.class =" java/lang/String ")'. Ich habe auch ein wenig den Befehl vereinfacht. Hoffe, das funktioniert. – nicola