Вопрос о ошибке JRI

Я пытаюсь запустить R script в Java, таким образом, я установил JRI. и запустите пример, я использую Eclipse на 64-битных окнах 7. Часть кода примера выглядит следующим образом:

    public static void main(String[] args) {
        System.out.println("Creating Rengine (with arguments)");
 Rengine re=new Rengine(args, false, null);
        System.out.println("Rengine created, waiting for R");
 if (!re.waitForR()) {
            System.out.println("Cannot load R");
            return;
        }

Однако каждый раз я запускаю его. он был настроен после распечатки "Создание Rengine (с аргументами)" никогда не распечатывал "Rengine created, ожидая R"

Я не знаю, что является правильным аргументом для ввода, я попытался добавить "-no-save" в аргументы программы конфигурации запуска eclipse, но все равно не помогает.

любые предложения? Большое спасибо

Ответ 1

Ссылка: http://rosuda.org/JRI/

  • R_HOME должен быть установлен правильно
  • (Windows): каталог, содержащий R.dll должен находиться в вашем PATH
  • (Mac): Ну, это Mac, так что просто работает;).
  • (unix): R необходимо скомпилировать, используя --enable-R-shlib, а каталог, содержащий libR.so, должен находиться в LD_LIBRARY_PATH. Также libjvm.so и другие зависимые библиотеки Java должны на LD_LIBRARY_PATH.
  • Библиотека JRI должна находиться в текущей каталог или любой каталог, указанный в java.library.path.
  • В качестве альтернативы вы можете указать его путь с -Djava.library.path = при запуске JVM. Когда вы используете последний, убедитесь, что вы проверяете Свойство java.library.path сначала такое что вы не сломаете свою Java.
  • В зависимости от вашей системы R verison и другие функции, которые вы хотите для использования вам может потребоваться установить дополнительные настройки, такие как R_SHARE_DIR, R_INCLUDE_DIR и R_DOC_DIR.

Мои собственные заметки:

Установка R на Mac:

Ссылка: http://cran.r-project.org/mirrors.html Ссылка: http://cran.r-project.org/bin/macosx/RMacOSX-FAQ.html

Скачан MacOSX binary R-2.13.0.pkg из http://cran.csiro.au/


Установка интерфейса Java для R (JIR) в Mac OS X

Ссылка: http://www.rforge.net/JRI/

JIR теперь является частью rJava.

> install.packages("rJava")
--- Please select a CRAN mirror for use in this session ---
trying URL 'http://cran.csiro.au/bin/macosx/leopard/contrib/2.13/rJava_0.8-8.tgz'
Content type 'application/x-gzip' length 769006 bytes (750 Kb)
opened URL
==================================================
downloaded 750 Kb


The downloaded packages are in
    /var/folders/ZZ/ZZ7tAIJsFU8FDfPPp7H53++++TM/-Tmp-//RtmpCHz9Mh/dow

> library(rJava)
> .jinit()
> s <- .jnew("java/lang/String", "Hello World!")
> print(s)
[1] "Java-Object{Hello World!}"

Запуск примера JRI Java с Eclipse в Mac OS X

Скопировал rJava/jri/examples/rtest.java в Eclipse JRI/src/. Скопировали JRI.jar из каталога jri в JRI/lib/ и добавили его в путь сборки.

Компонент rtest.java компилируется, но не запускается как приложение Java.

По-видимому, его нужно запустить: ./run rtest.

После изучения оболочки "run" script, которая поставляется вместе с пакетом rJava (внутри ./jri/), я установил их в конфигурации запуска Eclipse:

Environnment:

R_HOME = /Library/Frameworks/R.framework/Resources
PATH=/Library/Frameworks/R.framework/Resources/bin/

Кроме того, в командной строке примера script устанавливаются следующие окружения:

R_INCLUDE_DIR=Library/Frameworks/R.framework/Resources/include
R_SHARE_DIR=Library/Frameworks/R.framework/Resources/share
R_DOC_DIR=Library/Frameworks/R.framework/Resources/doce
JRI_LID_PATH=Library/Frameworks/R.framework/Resources/lib:/Library/Frameworks/R.framework/Resources/bin

Аргумент VM:

-Djava.library.path=/Library/Frameworks/R.framework/Resources/library/rJava/jri/

JRI.jar теперь ссылается на путь сборки, который:

/Library/Frameworks/R.framework/Resources/library/rJava/jri/JRI.jar. 

Это автоматически появляется на вкладке -cp в конфигурации запуска.

Кроме того, для конфигурации запуска требуется аргумент программы: --save, --no-save or --vanilla.

Ответ 2

Скорее всего, он не найдет jri.dll или R.dll. Если вы ничего не видите, даже не исключение, JVM рушится. Ищите файлы типа hs_pid *, которые должны сообщать вам, какая библиотека является виновником.

Ответ 3

Я нашел этот вопрос в своей собственной борьбе с R на Windows, хотя в Linux он просто работал.

Я тоже обнаружил, что получаю "Создание Rengine (с аргументами)", но ничего более.

Было найдено jri.dll и R.dll, которые я смог доказать:

  • jri.dll - удалил его из текущего каталога, который вызвал ошибку:

    Невозможно найти родную библиотеку JRI! Убедитесь, что исходная библиотека JRI находится в каталоге, указанном в java.library.path.

    java.lang.UnsatisfiedLinkError: нет jri в java.library.path

(при повторном копировании убедитесь, что выбрали правильную 32-разрядную или 64-разрядную версию, чтобы избежать ошибки типа "Невозможно загрузить IA 32-разрядную .dll на 64-разрядную платформу AMD" )

  • R.dll живет в каталоге установки C:\Program Files\R\R-2.15.0\bin\x64 Если PATH установлен неправильно в файле run.bat(который он был), вы получаете немного отличающуюся ошибку

    Невозможно найти родную библиотеку JRI! Убедитесь, что исходная библиотека JRI находится в каталоге, указанном в java.library.path.

    java.lang.UnsatisfiedLinkError: [CURRENT DIR]\jri.dll: не удается найти зависимые библиотеки

Если эти две вещи установлены правильно (и не генерируются файлы hs_pid *), я обнаружил, что проблема заключается в отсутствии R_HOME в run.bat. Добавление

set R_HOME=C:\Program Files\R\R-2.15.0\

исправил это, и теперь все это работает для меня. Мне не нужно было добавлять -save, -no-save или -vanilla в script. Кроме того, он имел "runtest" hardcoded, поэтому. /run.bat runtest2 не будет DWYM.

Короткий ответ: Windows run.bat script был сломан (тогда как Linux "run" script был корректным из коробки).

Ответ 4

У меня такая же проблема при работе с rJava, 64-разрядной версией Windows 7.

И вот решение.

Добавлено -Djava.library.path = "$ {env_var: PATH}" в eclipse → Project → Run As → Run Configuration → Arguments.

И убедитесь, что System.getProperty( "java.library.path" ) указывает на jri.dll

Я потратил много времени на эту проблему, поэтому не стесняйтесь задавать любые вопросы;)

Ответ 5

Нижеприведенная ошибка может быть вызвана двумя не установленными путями: one не найден r.dll или/и jri.dll не найден. Убедитесь, что системный путь включает 32-разрядные системы.

% R_HOME%\Bin;% R_HOME%\Bin\i386;% R_HOME%\Библиотека\rJava\ИСР\i386

Также убедитесь, что плагин install.packages( "rJava" ) установлен из консоли R

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:1886)
    at java.lang.Runtime.loadLibrary0(Runtime.java:849)
    at java.lang.System.loadLibrary(System.java:1088)
    at org.rosuda.JRI.Rengine.<clinit>(Rengine.java:19)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:274)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray$1.run(CallSiteArray.java:65)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray$1.run(CallSiteArray.java:62)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallStaticSite(CallSiteArray.java:62)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:159)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112)
    at com.acumetric.crux.analysis.StatisticCalculator.<init>(StatisticCalculator.groovy:15)