Общие проблемы — пакет Java и xlsx
Пользователи R, которые ранее не использовали пакеты, основанные на Java, часто сталкиваются с проблемами при попытке использовать пакет xlsx
, используемый для чтения электронных таблиц Excel.
Среда выполнения Java не установлена
Во-первых, многим новым пользователям R ранее не требовалось устанавливать среду выполнения Java на свои компьютеры. Пакет xlsx
зависит от пакетов rJava
и xlsxjars
. rJava
требует, чтобы на компьютере также была установлена Java Runtime Environment 1.2 или выше.
Решение 1. Используйте пакет для чтения Excel, не требующий Java
СОВЕТ ДЛЯ ПРОФЕССИОНАЛОВ. Самый простой способ обойти эту проблему — использовать пакет R, который не зависит от Java, например openxlsx или readxl.
Для openxlsx
это очень просто.
install.packages("openxlsx")
library(openxlsx)
# read the help file to identify the arguments needed to
# correctly read the file
?openxlsx
theData <- read.xlsx(...)
Тот же процесс можно использовать для readxl
.
install.packages("readxl")
library(readxl)
# read the help file to identify the arguments needed to
# correctly read the file
?readxl
theData <- read_excel(...)
Решение 2. Установите Java и необходимые пакеты R
Тем не менее, для людей, которые все еще хотят использовать пакет xlsx
, есть работающие решения для Windows, Mac OSX и Ubuntu Linux.
РЕШЕНИЕ (Windows). Загрузите и установите последнюю версию среды выполнения Java а> от Оракула. Обратите внимание: если вы используете 64-разрядную версию R, вам необходимо установить 64-разрядную версию Java Runtime.
РЕШЕНИЕ (Mac OSX). Что касается более новых версий Mac OSX, это стало более сложным. После установки Java Development Kit на компьютер необходимо выполнить определенный набор команд. Они задокументированы на странице rJava Issue 86.
РЕШЕНИЕ (Ubuntu): используйте расширенный инструмент упаковки Ubuntu для установки Java, а затем перенастройте Java в R.
sudo apt-get install openjdk-8-jdk # openjdk-9-jdk has some installation issues
sudo R CMD javareconf
Затем в R/RStudio установите пакет xlsx
.
install.packages("xlsx")
32-битная и 64-битная Java в Windows
Другая распространенная проблема, с которой могут столкнуться люди, — это несовместимость между версией среды выполнения Java, установленной на их компьютере, и версией R, 32-разрядной или 64-разрядной.
Например, если установлена 64-разрядная версия R, но установлена 32-разрядная версия Java Runtime Environment, R не будет виден Java Runtime Environment, что приведет к той же ошибке, что Java не установлена, как указано выше.
РЕШЕНИЕ. Эту проблему можно решить путем установки 64-разрядной версии Java Runtime. для Windows или изменив конфигурацию RStudio для использования 32-разрядной версии R.
Можно определить версию установленной Java и является ли она 32- или 64-разрядной, выполнив следующую функцию в R/RStudio.
system("java -version")
... который на ПК под управлением Windows вернет что-то вроде этого.
Извлечение настроек Java из реестра Windows
Другой подход к проверке версии Java, установленной на компьютере под управлением Windows, заключается в использовании utils::readRegistry()
(h/t Доступ к реестру Windows внутри R).
readRegistry("SOFTWARE\\JavaSoft\\Java Runtime Environment","HLM",maxdepth=3)
возвращает следующее:
> readRegistry("SOFTWARE\\JavaSoft\\Java Runtime Environment","HLM",maxdepth=3)
$BrowserJavaVersion
[1] "11.261.2"
$CurrentVersion
[1] "1.8"
$`1.8`
$`1.8`$JavaHome
[1] "C:\\Program Files\\Java\\jre1.8.0_261"
$`1.8`$MicroVersion
[1] "0"
$`1.8`$RuntimeLib
[1] "C:\\Program Files\\Java\\jre1.8.0_261\\bin\\server\\jvm.dll"
$`1.8.0_261`
$`1.8.0_261`$JavaHome
[1] "C:\\Program Files\\Java\\jre1.8.0_261"
$`1.8.0_261`$MicroVersion
[1] "0"
$`1.8.0_261`$RuntimeLib
[1] "C:\\Program Files\\Java\\jre1.8.0_261\\bin\\server\\jvm.dll"
$`1.8.0_261`$MSI
$`1.8.0_261`$MSI$AUTOUPDATECHECK
[1] "1"
$`1.8.0_261`$MSI$AUTOUPDATEDELAY
[1] ""
$`1.8.0_261`$MSI$EULA
[1] ""
$`1.8.0_261`$MSI$FROMVERSION
[1] "NA"
$`1.8.0_261`$MSI$FROMVERSIONFULL
[1] ""
$`1.8.0_261`$MSI$FullVersion
[1] "1.8.0_261-b12"
$`1.8.0_261`$MSI$INSTALLDIR
[1] "C:\\Program Files\\Java\\jre1.8.0_261\\"
$`1.8.0_261`$MSI$JAVAUPDATE
[1] "1"
$`1.8.0_261`$MSI$JU
[1] ""
$`1.8.0_261`$MSI$OEMUPDATE
[1] ""
$`1.8.0_261`$MSI$PRODUCTVERSION
[1] "8.0.2610.12"
Это много вывода, но мы по-прежнему видим, что текущая версия Java — 1.8, а параметр JavaHome
равен C:\\Program Files\\Java\\jre1.8.0_261
. Поскольку дерево реестра относительно сложное, требуется немало знаний, чтобы написать правильный ключ, чтобы уменьшить количество возвращаемых результатов.
# more specific extract, given that $CurrentVersion is 1.8
readRegistry("SOFTWARE\\JavaSoft\\Java Runtime Environment\\1.8","HLM",maxdepth=3)
... возвращает более целенаправленный набор параметров реестра.
> readRegistry("SOFTWARE\\JavaSoft\\Java Runtime Environment\\1.8","HLM",maxdepth=3)
$JavaHome
[1] "C:\\Program Files\\Java\\jre1.8.0_261"
$MicroVersion
[1] "0"
$RuntimeLib
[1] "C:\\Program Files\\Java\\jre1.8.0_261\\bin\\server\\jvm.dll"
Совместимость Java/R с неанглийскими версиями Windows 10
Обратите внимание, что по состоянию на июль 2020 г. пользователи на Stackoverflow.com сообщали о проблемах с установкой Java и rJava в сценарии, когда версия Windows не является англоязычной (например, китайская, польская и т. д.). Похоже, что установщик Java работает с этими версиями Windows, R и пакет rJava
не могут правильно получить доступ к каталогу JAVA_HOME
.
Чтобы решить эту проблему, переустановите R с тем же языком, который используется в Windows. То есть в китайской версии Windows установите R с поддержкой китайского языка. После установки вы можете изменить язык на английский, установив language = "en"
в файле .Rconsole
.
Ссылка: Распространенные проблемы: Java и xlsx, первоначально опубликованный мной в моем репозитории наставников сообщества специалистов по науке о данных Джона Хопкинса, январь 2017 г.
person
Len Greski
schedule
30.12.2020
rJava
. Этот пост может вам помочь - person bretauv   schedule 30.12.2020openxlsx
, который имеет схожие функции, но не идентичный (и не нуждается в пакетеrJava
). - person jay.sf   schedule 30.12.2020