Хотя пакет xlsx установлен в R, он не работает

Хотя пакет xlsx установлен, он не работает. Я получаю следующую ошибку. Что я должен делать? Я использую последнюю версию R

install.packages("xlsx")
Installing package into ‘C:/Users/Cgdm/Documents/R/win-library/4.0’
(as ‘lib’ is unspecified)
trying URL 'https://cran.rstudio.com/bin/windows/contrib/4.0/xlsx_0.6.5.zip'
Content type 'application/zip' length 374910 bytes (366 KB)
downloaded 366 KB

package ‘xlsx’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
C:\Users\Cgdm\AppData\Local\Temp\RtmpCy2Eng\downloaded_packages


library(xlsx)
Error: package or namespace load failed for ‘xlsx’:
onLoad failed in loadNamespace() for 'rJava', details:
call: fun(libname, pkgname)
error: JAVA_HOME cannot be determined from the Registry

person Cgdmm    schedule 30.12.2020    source источник
comment
Видимо проблема с rJava. Этот пост может вам помочь   -  person bretauv    schedule 30.12.2020
comment
В качестве альтернативы попробуйте пакет openxlsx, который имеет схожие функции, но не идентичный (и не нуждается в пакете rJava).   -  person jay.sf    schedule 30.12.2020


Ответы (2)


Общие проблемы — пакет 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

Похоже, что ваш JAVA_HOME настроен неправильно, поэтому с https://www.rdocumentation.org/packages/xlsx:

Убедитесь, что переменная системной среды JAVA_HOME настроена надлежащим образом и указывает на выбранный вами jdk. Как правило, это также будет включено в вашу переменную среды PATH. Параметры и системные переменные окружения, доступные из R, можно увидеть с помощью Sys.getenv().

Проверьте свою конфигурацию, выполнив

d <- Sys.getenv()
d[names(d) == "JAVA_HOME"]

Он должен указывать на вашу установку Java, например. C:\Program Files\Java\jdk1.8.0_104

В Windows 10 это можно установить в дополнительных параметрах системы, свойствах системы, переменных среды.

person Andre Wildberg    schedule 30.12.2020