Ошибка загрузки rJava в RStudio / R после «обновления» до OSX Yosemite
Недавно я «обновился» от OSX Mountain Lion до Yosemite и с R 3.1.3 до 3.2. Сразу после обновления, когда я открыл R или RStudio, у меня появилось всплывающее сообщение о том, что мне нужно установить Java 6. Кроме того, загрузка rJava
или любого пакета, зависящего от rJava (например, xlsx
), привела к сбою RStudio (R также разбился, когда я попробовал это, открыв R.app
напрямую).
Попробовав несколько исправлений, найденных в переполнении стека и в другом месте (подробнее см. Ниже), я нахожусь в точке, где загрузка rJava
или любого пакета, который зависит от rJava
больше не приводит к сбою R, но приводит к следующей ошибке:
library(rJava) Error : .onLoad failed in loadNamespace() for 'rJava', details: call: dyn.load(file, DLLpath = DLLpath, ...) error: unable to load shared object '/Library/Frameworks/R.framework/Versions/3.2/Resources/library/rJava/libs/rJava.so': dlopen(/Library/Frameworks/R.framework/Versions/3.2/Resources/library/rJava/libs/rJava.so, 6): Library not loaded: @rpath/libjvm.dylib Referenced from: /Library/Frameworks/R.framework/Versions/3.2/Resources/library/rJava/libs/rJava.so Reason: image not found Error: package or namespace load failed for 'rJava'
Однако, если я вызываю R из командной строки, а затем загружаю rJava
или любой пакет, который зависит от rJava
, он работает (или, по крайней мере, я не получаю никаких сообщений об ошибках).
- Изменение пути библиотеки DL по умолчанию с использованием .libPaths в Rprofile.site не работает
- В R markdown в RStudio, как я могу предотвратить запуск исходного кода PDF-страницы?
- Обновить R с помощью RStudio
- Оператор "[<-" в RStudio и R
- Открытие приложения Shiny прямо в браузере по умолчанию
Я пробовал несколько разных попыток исправления, некоторые из них несколько раз, и не могу точно помнить, что я сделал в каком порядке (не понимал, что это было бы таким болотом и на самом деле не отслеживалось) , но вот суть этого:
-
Добавлено следующее в мой
.bash_profile
(за этот ответ SO ):экспорт JAVA_HOME = “/ usr / libexec / java_home -v 1.8″
export LD_LIBRARY_PATH = $ JAVA_HOME / jre / lib / server -
Переконфигурируйте java из командной строки следующим образом:
sudo R CMD javareconf -n
-
Проверенные
options("java.home")
и обнаружили, что для этого параметра установленоNULL
. Я попытался установить его на следующее (в этом вопросе SO ):опции ( “java.home” = “/ Library / Java / JavaVirtualMachines / jdk1.8.0_45.jdk / Содержание / Главная / JRE”)
-
Установил последний Java Development Kit и переустановил
rJava
из источника (не могу вспомнить, где я нашел его).
В какой-то момент, пытаясь все это, я смог загрузить rJava
без сбоев R, но вместо этого получил сообщение об ошибке, опубликованное выше. Кроме того, когда я ухожу из RStudio, он, похоже, закрывается нормально, но затем появляется сообщение «RStudio quit неожиданно», что указывает на то, что программа потерпела крах при попытке закрыть.
Я, наконец, решил установить Java для OS X 2014-001 (Java 6), поскольку, похоже, у меня заканчиваются варианты. Теперь, когда я открыл R или RStudio, «Это программное обеспечение нуждается в Java 6», всплывающее сообщение больше не появилось. Тем не менее, я все еще получал .onLoad failed in loadNamespace() for 'rJava'
сообщения об ошибке .onLoad failed in loadNamespace() for 'rJava'
выше.
При просмотре некоторых сообщений, на которые я уже смотрел, я заметил еще один ответ SO, который я пропустил раньше, что рекомендовало открыть RStudio со следующим кодом командной строки, который дает RStudio правильный путь к java:
LD_LIBRARY_PATH = $ (/ usr / libexec / java_home) / jre / lib / server: open -a RStudio
Это открыло окно RStudio, и я также смог загрузить rJava
и пакеты, зависящие от него, без получения ошибки.
Наконец, я попытался запустить R из командной строки (чего я раньше не делал). Оказывается, что в командной строке загрузка rJava
или любого пакета, который зависит от rJava
работает и не вызывает никаких ошибок.
Итак, теперь я могу заставить rJava
работать, если я открою RStudio из командной строки с кодом, который дает RStudio путь java (как отмечено выше). Тем не менее, я хотел бы найти способ исправить основную проблему, какова бы она ни была, чтобы RStudio можно было открыть обычным способом Mac, без необходимости командной строки kludge. Я также обеспокоен тем, что наличие старой версии установленной Java может вызвать проблемы в будущем.
Есть ли у кого-нибудь идеи о том, как диагностировать и решать эту проблему?
- Rstudio дублирует команды в командной строке
- Динамическое создание вкладок с графиками в блестящем состоянии без повторного создания существующих вкладок
- избегайте строки, напечатанной на консоли, усеченной (в RStudio)
- Rstudio rmarkdown: как портретный, так и альбомный макет в одном PDF-файле
- Разница: кнопка «Скомпилировать PDF» в RStudio vs. knit () и knit2pdf ()
- Rtools не обнаружен из RStudio
- Графики ggplot в скриптах не отображаются в Rstudio
- RStudio не выбирает кодировку, которую я говорю ей при чтении файла
У меня была такая же проблема, и я прошел те же шаги, что и вы. Последним шагом для запуска RStudio через Finder / Spotlight было соединение libjvm.dylib с / usr / local / lib:
sudo ln -f -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
Флаг -f
добавлен, чтобы принудительно перезаписать существующий файл / ссылку
В OSX El Capitan 10.11 у пользователя нет разрешения на запись в / usr / lib. Вместо этого используйте следующую команду:
sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
Вы можете загрузить libjvm.dylib явно, запустив
dyn.load('/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/server/libjvm.dylib') library(rJava)
Следующие командные работы:
sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
После этого, в RStudio, загрузка rJava работает через загрузку пакета «xlsx».
library("xlsx")
PS # 1 Окружающая среда: Mac OS X El Capitan 10.11.3+ с RStudio 0.99.491+ и R 3.2.3+. (Я тестировал это также на macOS Sierra (10.12) и R.3.3.1.)
PS # 2 Я обнаружил, что openxlsx
работает намного быстрее и не полагается на работу Java, поэтому теперь я использую этот пакет. Надеюсь, что помогает другим.
В macOS High Sierra (10.13.1) и Java версии 9 вам нужно использовать несколько другой путь JVM (обратите внимание на отсутствующую папку jre
в пути по сравнению с инструкциями для более ранних версий Java):
sudo ln -f -s $(/usr/libexec/java_home)/lib/server/libjvm.dylib /usr/local/lib
Вы также должны уведомить R о JVM:
ln -s /usr/local/lib/libjvm.dylib /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/
Именно так я правильно настроил его на двух компьютерах Mac под управлением Mac OS X El Capitan (10.11.6):
-
Удалите ‘rJava’, выполнив следующие команды в окне терминала:
Rscript -e 'remove.packages("rJava")' sudo Rscript -e 'remove.packages("rJava")'
-
Загрузите и установите программное обеспечение Java из Oracle: https://www.java.com/ru/download/mac_download.jsp
-
Добавьте следующие строки в
/Users/
используя ваш любимый редактор:/.bashrc # Set JAVA_HOME so rJava package can find it export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)/jre
-
Закройте и перезапустите все windows терминала, R и RStudio (чтобы получить изменения в
.bashrc
). -
Выполните следующую команду в окне терминала:
sudo ln -sf $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
-
Выполните следующую команду в окне терминала:
sudo Rscript -e 'install.packages("rJava", repos="http://rforge.net", type="source")'
Вы должны иметь возможность использовать CRAN rJava, без необходимости перекомпилировать rJava или делать какие-либо дополнительные шаги, связывая общую библиотеку с библиотекой библиотек R frameworks.
sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /Library/Frameworks/R.framework/Libraries
Вот несколько простых шагов для этого:
- удалить пакет rJava: remove.packages (rJava)
- закрыть R
- установить последнюю Java на вас mac
- Откройте терминал и введите следующую команду: sudo R CMD javareconf
-
Откройте R и установите rJava с помощью этой команды:
install.packages (“rJava”, dependencies = TRUE, type = “source”)
Проблема с изображением не найдена с совершенно новой установкой на OSX High Sierra с новейшим Java SE 10 JDK.
Мне удалось решить проблему с rJava, используя исправление, обнаруженное на странице проблем rJava Github: https://github.com/su/rJava/issues/78
R CMD javareconf JAVA_CPPFLAGS = -I / Система / Библиотека / Рамки / JavaVM.framework / Заголовки
Вот что сработало для меня на MAC:
-
в вашем
~/.profile
или~/.bashrc
добавьте эту строку:%export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home
1.1
% source .profile
(или% source .bashrc
) -
% sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
-
remove.packages(rJava)
-
remove.packages(Rweka)
- С терминала введите
%sudo R CMD javareconf
команду:%sudo R CMD javareconf
-
install.packages("rJava", dependencies = TRUE, type = "source")
-
install.packages("rJava", dependencies = TRUE, type = "source")
- Загрузите свою
library("rJava", "RWeka")
Удачи.
Может быть, еще один простой ответ, который не касается вашей файловой системы:
$ install_name_tool -add_rpath /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/server /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so
(Замените jdk1.8.0_131.jdk
на свой путь JDK.)
Проверьте расположение файла libjvm.dylib.
Попробуйте это, в моем случае это сработало:
dyn.load('/Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home/lib/server/libjvm.dylib') library(rJava)
Здесь вы можете загрузить устаревшую версию Java 6 для El Capitan: https://support.apple.com/kb/DL1572?viewlocale=en_US&locale=en_US. После этого пакет rJava работает для меня.
Выполните следующее в командной строке: sudo R CMD javareconf
Несколько вышеупомянутых решений упомянули об этом, но они также предлагают удалить и впоследствии переустановить пакет rJava
. Я обнаружил, что эти дополнительные шаги не нужны.
Эта строка ниже решила ту же проблему, что и у меня с пакетом rJava
, как это делали некоторые другие в этой дискуссии. Я уверен, что есть несколько решений этой проблемы, и я искренне благодарю их всех за их вклад, потому что иногда одна строка, подобная приведенной ниже, экономит много времени, чтобы отправиться в мусор!
sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib