R von Java ausführen Ich möchte rJava ausführen

Einführung

Vor ungefähr einem halben Jahr sagte ein Neuling: "Ich möchte R von Java aus ausführen", und ich schrieb ein Memo, als ich antwortete. Es war in Ordnung, den Prozess zu starten, aber es gab ein Modul namens ** JRI ** namens ** Java / R Interface **, also entschied ich mich, mich damit zu befassen.

What is rJava?

rJava is a simple R-to-Java interface.
It is comparable to the .C/.Call C interface.
rJava provides a low-level bridge between R and Java (via JNI).
It allows to create objects, call methods and access fields of Java objects from R.

http://www.rforge.net/rJava/index.html

Kurz gesagt, es ist eine Schnittstelle, die R über JNI aufruft. Da JNI verwendet wird, war das Einrichten der DLL-Datei etwas mühsam.

Holen Sie sich JRI.jar

Ich werde JRI.jar fallen lassen.

Starten Sie die R-GUI und führen Sie den Installationsbefehl aus.

install.packages('rJava')

Dadurch werden die JAR und die DLL unter "C: \ Programme \ R \ R-3.3.1 \ library \ rJava " heruntergeladen. Es scheint, dass das JAR-Versionsmanagement plötzlich chaotisch wird. Nur JRI.jar scheint in der Lage zu sein, das Repository zu verwalten.

Klicken Sie hier, um Gradle zu verwenden.

// https://mvnrepository.com/artifact/org.nuiton.thirdparty/JRI
compile group: 'org.nuiton.thirdparty', name: 'JRI', version: '0.9-6'

Klicken Sie hier, um Maven zu verwenden.

<dependency>
	<groupId>org.nuiton.thirdparty</groupId>
	<artifactId>JRI</artifactId>
	<version>0.9-6</version>
</dependency>

… Aber ich brauche unbedingt die in rJava enthaltene DLL-Datei. Es scheint notwendig zu sein, einzelne Maßnahmen zu ergreifen, z. B. das Löschen von der ursprünglichen Site, ohne den Befehl zu drücken. http://www.rforge.net/rJava/files/

DLL-Einstellungen

Holen Sie sich jri.dll und setzen Sie es. Eine von C: \ Programme \ R \ R-3.3.1 \ library \ rJava \ jri.

64bit ist "x64", 32bit ist "i386".

Dieses Mal habe ich es im Ordner direkt unter der Ausführung bereitgestellt. Wenn Sie es in einem anderen Ordner bereitstellen möchten, müssen Sie es in Ihren PATH einfügen.

So führen Sie eine eigenständige App aus

Sie müssen es durch Ihren Pfad tun.

So führen Sie die Windows-Umgebung aus


set PATH=%PATH%;C:/Program Files/R/R-3.3.1/bin;C:/Program Files/R/R-3.3.1/bin/i386;C:\Program Files\R\R-3.3.1\library\rJava\jri\i386

java ^
-classpath "./classes;C:/Program Files/R/R-3.3.1/library/rJava/jri/JRI.jar" ^
example.MyTest

Es funktionierte ohne die folgenden Einstellungen.

Unnötige Einstellungen?


set R_DOC_DIR="C:/Program Files/R/R-3.3.1/doc"
set R_INCLUDE_DIR="C:/Program Files/R/R-3.3.1/include"
set R_SHARE_DIR="C:/Program Files/R/R-3.3.1/share"

Ausführungsmethode bei Ausführung mit einer Serveranwendung

Fügen Sie JRI.jar zu WEB-INF / lib hinzu (nicht erforderlich, wenn es von Maven oder Gradle verwaltet wird).

Sie müssen auch den Pfad für jri.dll festlegen. Grüne Schaltfläche Ausführen> Konfiguration ausführen> Argumente> VM-Argumente

Laufzeitargumente


-Djava.library.path="C:\Program Files\R\R-3.3.1\library\rJava\jri\i386"

Hinzufügen

Häufige Fehler

Vergiss den Pfad von jri.dll zu passieren

Ich bekomme oft diesen Fehler.

Cannot find JRI native library!
Please make sure that the JRI native library is in a directory listed in java.library.path.

java.lang.UnsatisfiedLinkError: no jri in java.library.path
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1864)
	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
	at java.lang.System.loadLibrary(System.java:1122)
	at org.rosuda.JRI.Rengine.<clinit>(Rengine.java:19)
	at example.MyTest(MyTest.java:11)

Vergessen Sie nicht, den Pfad von jri.dll festzulegen.

Werden Sie wütend, wenn Sie keine Variable über den R-Pfad übergeben

Wenn Sie das oben Gesagte durchbrechen, wird Folgendes angezeigt.

Cannot find JRI native library!
Please make sure that the JRI native library is in a directory listed in java.library.path.

java.lang.UnsatisfiedLinkError: C:\dll\jri.dll: Can't find dependent libraries
	at java.lang.ClassLoader$NativeLibrary.load(Native Method)
	at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1938)
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1854)
	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
	at java.lang.System.loadLibrary(System.java:1122)
	at org.rosuda.JRI.Rengine.<clinit>(Rengine.java:19)
	at example.MyTest(MyTest.java:11)

Selbst wenn es eingestellt ist, werde ich wütend, wenn die Abhängigkeit von DLL seltsam ist. Da jri.dll von der DLL unter bin / i386 oder bin / x86 abhängt, vergessen Sie nicht, sie ebenfalls festzulegen.

Zusammenfassung

Recommended Posts

R von Java ausführen Ich möchte rJava ausführen
Ich möchte schnell von Java nach SQLite schreiben
[Java] Ich möchte die Differenz zum Datum berechnen
Ich möchte Java-Updates insgesamt stoppen
Änderungen von Java 8 zu Java 11
Summe von Java_1 bis 100
Ich möchte eine E-Mail in Java senden.
Ich möchte von npm richtig abschließen [2020]
Ich möchte Java8 für jeden mit Index verwenden
rsync4j - Ich möchte rsync in Java berühren.
Von Java zu Ruby !!
Ich möchte mit Firestore von Rails spielen
Ich habe versucht, die Grammatik von R und Java zu übersetzen [Von Zeit zu Zeit aktualisiert]
Ich möchte so etwas wie "cls" in Java machen
Ich möchte ES2015 auch in Java verwenden! → (´ ・ ω ・ `)
6 Funktionen, die ich nach meiner Rückkehr von Scala nach Java verpasst habe
Ich möchte Bildschirmübergänge mit Kotlin und Java machen!
Migration von Cobol nach JAVA
Ich möchte Zeichen konvertieren ...
Neue Funktionen von Java7 bis Java8
Stellen Sie eine Verbindung von Java zu PostgreSQL her
Von ineffektivem Java zu effektivem Java
[Java] Ich möchte ein Byte-Array in eine Hexadezimalzahl konvertieren
[JDBC] Ich habe versucht, von Java aus auf die SQLite3-Datenbank zuzugreifen.
Ich möchte Java Applet ohne Verwendung einer IDE erstellen
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Führen Sie R von einem Tomcat-basierten Java-Prozess unter Amazon Linux aus
Ich möchte die Java 8 DateTime-API (jetzt) langsam verwenden.
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Ich möchte verschiedene Funktionen mit Kotlin und Java implementieren!
[Java] Ich möchte Standardeingabe und Standardausgabe mit JUnit testen
Ich möchte die if-else-Anweisung für bedingte Verzweigungen in Java vereinfachen
In Java möchte ich mehrere angegebene Zeichen nur von Anfang bis Ende abschneiden.
Ich möchte mit Java8 StreamAPI redu () einen anderen Typ als das Eingabeelement zurückgeben.
Führen Sie node.js von Android Java aus (Verarbeitung)
Führen Sie eine Batchdatei von Java aus
Ich habe versucht, mit Java zu interagieren
Java soll ab heute dabei sein
Von Java zu VB.NET-Writing Kontrastmemo-
Java, Schnittstelle für Anfänger
Ich habe versucht, das Java-Lernen zusammenzufassen (1)
Der Weg von JavaScript nach Java
Ich habe jetzt versucht, Java 8 zusammenzufassen
[Java] Konvertierung von Array zu Liste
Ich möchte nur Java mit Eclipse auf meinem Mac schreiben
Ich möchte mit Kotlin und Java zum vorherigen Bildschirm zurückkehren!
Wenn Sie die Java-Entwicklungsumgebung von Eclipse aus ändern möchten
[Java] Ich möchte mit dem Schlüssel im Objekt eindeutig arbeiten
[Android] Ich möchte den Listener über die Schaltfläche in ListView abrufen
Woran ich dachte, als ich anfing, von Java nach Kotlin zu migrieren
Ich möchte eine Webanwendung entwickeln!
Ich möchte ein schönes build.gradle schreiben
Ich möchte doppelte Fehlermeldungen beseitigen