Использование пакета rJava на Win7 64 бит с R

149

Я пытаюсь установить rJavaна компьютер с Win 7 64 бит. Когда я бегу

install.packages("rJava")

вроде бы все хорошо

Installing package(s) into ‘C:/Users/djq/Documents/R/win-library/2.13
(as ‘lib’ is unspecified)
trying URL 'http://software.rc.fas.harvard.edu/mirrors/R/bin/windows/contrib/2.13/rJava_0.9-1.zip'
Content type 'application/zip' length 654936 bytes (639 Kb)
opened URL
downloaded 639 Kb

package 'rJava' successfully unpacked and MD5 sums checked

The downloaded packages are in
    C:\TEMP\RtmpW2eAUw\downloaded_packages

но когда я пытался загрузить библиотеку, library(rJava)я получаю следующую ошибку:

Error : .onLoad failed in loadNamespace() for 'rJava', details:
  call: inDL(x, as.logical(local), as.logical(now), ...)
  error: unable to load shared object 'C:/Users/me/Documents/R/win-library/2.13/rJava/libs/x64/rJava.dll':
  LoadLibrary failure:  %1 is not a valid Win32 application.

Error: package/namespace load failed for 'rJava'

Я установил Java JRE (пробуя как 32-, так и 64-битные версии) и JDK (используя 32- и 64-битную версию). Моя версия R R version 2.13.1 (2011-07-08)и я использую RStudio.

Если я попытаюсь использовать 32-битный R, я могу загрузить rJavaнормально. Проблема только в том, rJavaчто не работает в R 64 бит? Как я могу сказать, что пакет только для 32 вместо 64?


редактировать: только что опубликовал R.version():

> R.Version()
$platform
[1] "x86_64-pc-mingw32"

$arch
[1] "x86_64"

$os
[1] "mingw32"

$system
[1] "x86_64, mingw32"

$status
[1] ""

$major
[1] "2"

$minor
[1] "13.1"

$year
[1] "2011"

$month
[1] "07"

$day
[1] "08"

$`svn rev`
[1] "56322"

$language
[1] "R"

$version.string
[1] "R version 2.13.1 (2011-07-08)"
djq
источник
Можете ли вы вставить результаты R.Version()к вашему вопросу? Я только что установил 64-битную версию, rJavaиспользуя точный метод, который вы описываете в своем вопросе. Я предполагаю, что ваша версия R является 32-битной.
Андри
Пожалуйста, поделитесь своими ответами, как вы решили это.
bigData
1
Добавление комментария здесь может помочь кому-то пройти весь список решений. Если вы получили вышеуказанную ошибку, проверьте, находится ли ваш Java в Program Filesили Program Files (x86). Добавьте путь к окнам в соответствии с принятым ответом. Если Program Files (x86)это означает, что у вас 32-битная версия, перейдите по ссылке sites.google.com/site/rforfishandwildlifegrads/home/week_2/… .
Divi

Ответы:

154

Обновление (июль 2018 года):

Последняя версия rJava для CRAN найдет jvm.dllавтоматически, без установки вручную PATHили JAVA_HOME. Однако обратите внимание, что:

  • Чтобы использовать rJava в 32-битном R, вам нужна Java для Windows x86
  • Чтобы использовать rJava в 64-битном R, вам нужна Java для Windows x64
  • Для сборки или проверки пакетов R с несколькими арками (по умолчанию) вам необходимо установить как Java для Windows x64, так и Java для Windows x86 . На Win 64 первые устанавливаются, C:\Program files\Java\а вторые C:\Program Files (x86)\Java\- не конфликтуют.

Начиная с версии Java 9, поддержка x86 (win32) была прекращена. Следовательно, последняя работающая многоархивная установка заключается в установке jdk-8u172-windows-i586.exe и jdk-8u172-windows-x64.exe, а затем двоичного пакета из CRAN:

install.packages("rJava")

Бинарный пакет из CRAN должен сам поднять jvm. Только для экспертов : для сборки rJava из исходного кода вам необходим --merge-multiarchфлаг:

install.packages('rJava', type = 'source', INSTALL_opts='--merge-multiarch')

Старый ответ:

(Примечание: многие люди в других ответах / комментариях сказали, что нужно удалить JAVA_HOME, так что учтите это. Недавно я не возвращался к этой проблеме, чтобы узнать, все ли перечисленные ниже шаги все еще необходимы.)

Вот небольшой совет о том, как начать работу с R + rJava в Windows 7 64bit. Есть несколько возможностей, но у большинства есть фатальные недостатки. Вот что сработало для меня:

Добавить jvm.dll в ваш путь

Для rJava, моста Java R <->, потребуется jvm.dll, но R не сможет найти эту DLL. Он находится в папке, как

C:\Program Files\Java\jdk1.6.0_25\jre\bin\server

или

C:\Program Files\Java\jre6\jre\bin\client

Где бы вы ни находились, добавьте этот каталог в переменную PATH Windows. (Windows -> «Путь» -> «Изменить переменные среды для вашей учетной записи» -> PATH -> изменить значение.)

Возможно, у вас уже есть Java в вашем PATH. Если это так, вы должны найти каталог клиент / сервер в том же «домашнем» каталоге Java, что и каталог PATH.

Чтобы быть в безопасности, убедитесь, что ваша архитектура соответствует. Если у вас есть Java Program Files, она 64-битная, поэтому вам следует запустить R64. Если у вас есть Java Program Files (x86), это 32-битный, поэтому вы используете простой 32-битный R.

Перезапустите R из меню Windows

Если R работает, выйдите.

Из меню Пуск, Пуск R / RGUI, RStudio. Это очень важно, чтобы заставить R принять ваши изменения PATH.

Установите rJava 0.9.2.

Более ранние версии не работают! Зеркала не обновлены, поэтому перейдите к источнику по адресу www.rforge.net: http://www.rforge.net/rJava/files/ . Обратите внимание на совет там

“Please use

`install.packages('rJava',,'http://www.rforge.net/')`

to install.”

Это почти правильно. Это на самом деле работает:

install.packages('rJava', .libPaths()[1], 'http://www.rforge.net/')

Следите за пунктуацией! Загадочный «.libPaths () [1]» просто говорит R установить пакет в директорию первичной библиотеки. По какой-то причине оставить значение пустым не получится, даже если оно по умолчанию.

misterbee
источник
4
Вместо того, чтобы оставить второй аргумент пустым, вы можете просто сделать install.packages('rJava', repos='http://www.rforge.net/').
Кен Уильямс
2
Как указано в ответе @ user2161065, загрузка rJava требует удаления переменной JAVA_HOME
David LeBauer
1
Хотя все это может понадобиться, даже после этого мне пришлось сбросить JAVA_HOME, как предложено @ user2161065
ajkl
3
+1 Добавление ...\jre\bin\serverк пути исправило это для меня
mchen
6
Где мы можем найти эту переменную "Windows PATH"?
Shreyes
114

Работа rJava во многом зависит от конфигурации вашего компьютера:

  1. Вы должны использовать одну и ту же 32-битную или 64-битную версию для R и JDK / JRE. Смесь этого никогда не сработает (по крайней мере, для меня).
  2. Если вы используете 64-битную версию, убедитесь, что вы не установили JAVA_HOME в качестве переменной окружения . Если эта переменная установлена, rJava не будет работать по любой причине (по крайней мере, для меня). Вы можете легко проверить в R, если JAVA_HOME установлен с

    Sys.getenv("JAVA_HOME")

Если вам нужно установить JAVA_HOME (например, он нужен для maven или чего-то еще), вы можете деактивировать его в R-сессии с помощью следующего кода перед загрузкой rJava:

if (Sys.getenv("JAVA_HOME")!="")
  Sys.setenv(JAVA_HOME="")
library(rJava)

Это должно сделать свое дело в большинстве случаев. Кроме того, это решит проблему с использованием пакета rJava на Win7 64 бит с R тоже. Я заимствовал идею сброса переменной окружения из-за сбоя установки пакета R: rJava .

user2161065
источник
20
Предыдущие решения не работали, пока я не избавился от JAVA_HOME. Это ключ.
bshor
15
Об этой проблеме JAVA_HOME следует сообщить rJava как об ошибке.
Очередь ученика
2
Это действительно помогло мне: if (Sys.getenv ("JAVA_HOME")! = "") Библиотека Sys.setenv (JAVA_HOME = "") (rJava) Спасибо @ user2161065
ajkl
добавление этого скрипта для удаления переменной JAVA_HOME сработало для меня!
Ричард
1
Это решение также работает для таких пакетов, как XLConnect и XLConnectJars, которые зависят от rJava. (Я пишу этот очевидный комментарий, чтобы поисковые системы могли легче находить эту страницу, чем проблемы, с которыми я столкнулся.)
Tripartio
31

Для меня настройка JAVA_HOME сделала свое дело (вместо того, чтобы сбросить, как в другом ответе, данном здесь). Либо в Windows:

set JAVA_HOME="C:\Program Files\Java\jre7\"

Или внутри R:

Sys.setenv(JAVA_HOME="C:\\Program Files\\Java\\jre7\\")

Но, пожалуй, лучшее решение (начиная с rJava 0.9-4) - это переопределение в R установки Windows JAVA_HOME в целом:

options(java.home="C:\\Program Files\\Java\\jre7\\")
library(rJava)
ROLO
источник
2
+1 за переопределение переменной env JAVA_HOME и установку в R.
carnust
Мой JAVA_HOME был установлен в папку JDK (так же как я занимаюсь разработкой Java), и у rJava его не было. Я использовал ваше последнее исправление (опции), так как не хочу связываться с хорошо работающей средой разработки Java. Спасибо!
chaslewis
1
options(java.home="my\\path\\to\\jre")работал, когда все остальное не удалось, в том числе настройки среды PATH
Даниэль Кризиан
Это сработало для меня options(java.home="C:\\Program Files\\Java\\jdk1.8.0_144\\jre"). Если у вас есть jdk1.8.
Саубхик
Используя Adopt Open JDK, это последнее предложение сработало для меня. Все остальные популярные решения провалились.
Ола Кастер
7

На последний вопрос есть простой ответ:

> .Machine$sizeof.pointer
[1] 8

Это означает, что я бегу R64. Если бы я работал под управлением 32-разрядной версии R, он вернул бы значение 4. То, что вы работаете с 64-разрядной ОС, не означает, что вы будете использовать 64-разрядную версию R, а из сообщения об ошибке, похоже, нет.

РЕДАКТИРОВАТЬ: если пакет имеет двоичные файлы, то они находятся в отдельных каталогах. Специфика будет зависеть от ОС. Обратите внимание, что ошибка LoadLibrary произошла при попытке найти dll в ...rJava/libs/x64/... папке В моей системе MacOS папка ... rJava / libs / ... `содержит 3 подкаталога: i386, ppc и x86_64. (Файлы PPC явно бесполезны.)

IRTFM
источник
Моя установка RStudio указала на 64-битную R. Когда я изменил ее на 32-битную, я мог импортировать rJavaпакет. Вот почему я так озадачен сообщением об ошибке, так как оно кажется полной противоположностью тому, что происходит.
DJQ
4

Извините за некро. Я тоже столкнулся с той же проблемой , и выяснил , что rJavaожидает JAVA_HOMEв точку к JRE. Если у вас установлен JDK, скорее всего, вы JAVA_HOMEуказываете на JDK. Мое быстрое решение:

Sys.setenv(JAVA_HOME=paste(Sys.getenv("JAVA_HOME"), "jre", sep="\\"))
friendzis
источник
3

У меня были некоторые проблемы с определением пакета Java, который был установлен, когда я столкнулся с этой проблемой, так как предыдущие ответы не совсем помогли мне. Чтобы разобраться, я набрал:

Sys.setenv(JAVA_HOME="C:/Program Files/Java/

и затем нажмите вкладку, и две предложенные директории были "jre1.8.0_31 /" и "jre7 /"

Jre7 не решил мою проблему, но jre1.8.0_31 / сделал. Окончательный ответ был запущен (перед библиотекой (rJava)):

Sys.setenv(JAVA_HOME="C:/Program Files/Java/jre1.8.0_31/")

Я использую 64-битную Windows 8.1 Надеюсь, это поможет кому-то еще.

Обновить:

Проверьте свою версию, чтобы определить, какой X должен быть (мой изменился несколько раз с этого поста):

Sys.setenv(JAVA_HOME="C:/Program Files/Java/jre1.8.0_x/")
Optimus
источник
3

У меня была связанная проблема с rJava. Он будет загружаться, но пакет, который зависит от него, не будет загружаться.

Пользователи могут тратить много времени на jvm.dll, PATH и JAVA_HOME, когда реальное исправление заключается в том, чтобы заставить установщик просто забыть о i386. Используйте опцию для install.packages. (это также работает, когда используется библиотека drat. (заслуга Dason)

install.packages("SqlRender",INSTALL_opts="--no-multiarch")

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

setx PATH "C:\Program Files\Java\jre1.8.0_102\bin\server;%PATH%"
userJT
источник
0

Мне нужно иметь 32-битную JRE для моего браузера, но 64-битную JRE для R и rJava. 32-битная JRE установлена ​​в папке по умолчанию. После некоторых экспериментов я обнаружил, что мне нужно только одно из предложений Мистерби, чтобы заставить rJava (версия 0.9-6 ) работать на меня. Все, что я сделал, это добавил путь к моей 64-битной установке Java:

C:\apps\Java\jre\bin\server\jvm.dll

в начало моей переменной окружения path (ваш путь, вероятно, будет другим) и удалите мой JAVA_HOME, как предложил user2161065 . Я поставил это перед входом

C:\ProgramData\Oracle\Java\javapath

который установщик Oracle вставляет в начало пути и указывает на некоторые символические ссылки на 32-битную JRE. Добавив запись в 64-битную jvm.dll, похоже, rJava может найти то, что ему нужно.

Михаил Щепаняк
источник
0

Я думаю, что это обновление. Мне не удалось установить rJava (в Windows), пока я не установил JDK, так как Javac не найден и javac не работает в командной строке Windows . Сообщение, которое я получал, было

'javac' is not recognized as an internal or external command, operable program or batch file.

JDK включает в себя JRE и в соответствии с https://cran.r-project.org/web/packages/rJava/index.html текущей версией rJava (0.9-7, опубликованной 2015-Jul-29) 2015 года.

SystemRequirements:     Java JDK 1.2 or higher (for JRI/REngine JDK 1.4 or higher), GNU make

Итак, вы: если rJava не будет установлен, потому что не может найти javac, и у вас установлена ​​JRE, попробуйте JDK. Также убедитесь, что это JAVA_HOMEуказывает на JDK, а не на JRE.

woodvi
источник
Я заметил, что это в основном противоположно тому, что сказал @friendzis.
Вудви
Может ли разработчик rJava внести ясность в эту проблему,
пожалуйста
0

Я решил проблему, удалив явно избыточное программное обеспечение Java с моего компьютера с Windows 7 x64. Я достиг этого, сначала удалив все приложения Java, а затем установив свежую версию Java . (Позже я указал R 3.4.3 x86_64-w64-mingw32 на путь Java , просто чтобы упомянуть, хотя я не думаю, что это реальная проблема.) На сегодняшний день осталось только Java 8 Update 161 (64-bit) 8.0.1610.12 затем. После этого install.packages("rJava"); library(rJava)все заработало отлично.

jay.sf
источник
0

Это продолжение Обновления (июль 2018 года). Я на 64-битной Windows 10, но настроен для сборки r пакетов из исходного кода для 32 и 64-битных с Rtools. Мой 64-битный JDK является JDK-11.0.2. Когда я могу, я делаю все в RStudio. По состоянию на март 2019 года rjava протестирован с <= jdk11, см. Выпуск github # 157 .

  • Установите jdks в их расположение по умолчанию для каждого обновления (июль 2018 года) от @Jeroen.
  • В R studio, установите JAVA_HOME на 64-битный JDK

Sys.setenv(JAVA_HOME="C:/Program Files/Java/jdk-11.0.2")

  • При желании проверьте вашу переменную среды

Sys.getenv("JAVA_HOME")

  • Установите пакет согласно рекомендации страницы github

install.packages("rJava",,"http://rforge.net")

К вашему сведению, консоль сценария rstudio не любит двойные запятые ... но она работает!

Аарон Дики
источник
0
  1. Загрузите Java с https://java.com/en/download/windows-64bit.jsp для 64-битных окон \ Установите его
  2. Загрузите комплект разработки Java по адресу https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html для 64-битных окон \ установите его
  3. Затем щелкните правой кнопкой мыши значок «Этот компьютер» на рабочем столе \ Свойства \ Дополнительные параметры системы \ Дополнительно \ Переменные среды \ В разделе «Системные переменные» выберите «Путь» \ «Изменить» \ «Создать» \ «Копировать» и вставьте пути «C: \ Program Files \ Java \ jdk1». .8.0_201 \ bin »и« C: \ Program Files \ Java \ jre1.8.0_201 \ bin »(без кавычек) \ OK \ OK \ OK

Примечание: jdk1.8.0_201 и jre1.8.0_201 будут изменены в зависимости от версии комплекта разработки Java и Java

  1. В окне «Переменные среды» перейдите в раздел «Пользовательские переменные для пользователя». Нажмите «Создать» \ «Имя переменной» как «JAVA_HOME», а значение переменной - «C: \ Program Files \ Java \ jdk1.8.0_201 \ bin» \ Нажмите ОК.

Чтобы проверить установку, откройте CMD \ Введите javac \ Нажмите Enter и введите java \ нажмите enter Появится введите описание изображения здесь

В RStudio запустить

Sys.setenv(JAVA_HOME="C:\\Program Files\\Java\\jdk1.8.0_201")

Примечание: jdk1.8.0_201 будет изменено в зависимости от версии комплекта разработки Java

Теперь вы можете без проблем установить и загрузить пакет rJava.

Баппа Дас
источник