【问题标题】:Although the xlsx package is installed in R, it does not workR中虽然安装了xlsx包,但是还是不行
【发布时间】:2021-04-06 22:30:16
【问题描述】:

虽然安装了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

【问题讨论】:

  • rJava 显然有问题。 This post 可能对你有帮助
  • 或者尝试openxlsx 包,它具有相似的功能,但不完全相同(并且不需要rJava)。

标签: r rjava r-xlsx


【解决方案1】:

常见问题——Java和xlsx包

以前没有使用过依赖 Java 的包的 R 用户在尝试使用用于读取 Excel 电子表格的 xlsx 包时经常会遇到问题。

未安装 Java 运行时

首先,许多新的 R 用户以前不需要在他们的计算机上安装 Java 运行时。 xlsx 包依赖于 rJavaxlsxjars 包。 rJava 要求 Java 运行时环境 1.2 或更高版本也存在于您的计算机上。

方案一:使用不需要Java的excel阅读器包

专业提示:解决此问题的最简单方法是使用不依赖于 Java 的 R 包,例如 openxlsxreadxl

对于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): 从 Oracle 下载并安装最新版本的 Java Runtime Environment。请注意,如果您运行的是 64 位版本的 R,则需要安装 64 位版本的 Java Runtime。

解决方案 (Mac OSX): 随着 Mac OSX 的更新版本,这变得更加复杂。在计算机上安装 Java 开发工具包后,需要遵循一组特定的命令。这些记录在rJava Issue 86 github page 上。

解决方案(Ubuntu):使用 Ubuntu Advanced Packaging Tool 安装 Java,然后在 R 中重新配置 Java。

  sudo apt-get install openjdk-8-jdk # openjdk-9-jdk has some installation issues
  sudo R CMD javareconf

然后在 R / RStudio 中安装 xlsx 包。

  install.packages("xlsx")

Windows 中的 32 位与 64 位 Java

人们可能遇到的另一个常见问题是计算机上安装的 Java 运行时环境版本与 R 版本(32 位或 64 位)不兼容。

例如,如果安装了 64 位版本的 R,但安装了 32 位版本的 Java Runtime Environment,则 R 将无法看到 Java Runtime Environment,产生相同的“Java 未安装错误”如上所述。

解决方案:此问题可以通过installing the 64-bit version of Java Runtime for Windows 解决,或者通过更改 RStudio 配置以使用 32 位版本的 R 来解决。

可以通过在 R / RStudio 中执行以下函数来识别安装的 Java 版本,以及是 32 位还是 64 位。

system("java -version")

...在基于 Windows 的 PC 上会返回类似这样的内容。

从 Windows 注册表中提取 Java 设置

验证安装在基于 Windows 的计算机上的 Java 版本的另一种方法是使用 utils::readRegistry() (h/t Access Windows Registry inside 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 年 7 月,Stackoverflow.com 上的用户报告了在 Windows 版本为非英语语言版本(例如中文、波兰语等)的情况下安装 Java 和 rJava 的问题。 Java 安装程序在这些版本的 Windows、R 和 rJava 包上的工作方式似乎无法正确访问 JAVA_HOME 目录。

要更正此问题,请使用 Windows 使用的相同语言重新安装 R。即在中文版Windows上,安装支持中文的R。安装后,您可以通过在.Rconsole 文件中设置language = "en" 将语言更改为英语。

参考:Common Problems: Java and xlsx package,最初由我于 2017 年 1 月在我的约翰霍普金斯大学数据科学专业化社区导师库中发布。

【讨论】:

    【解决方案2】:

    您的 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 上,可以在“高级系统设置、系统属性、环境变量”中进行设置

    【讨论】:

      猜你喜欢
      • 2019-10-17
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      • 1970-01-01
      • 2015-02-28
      • 2014-01-06
      • 1970-01-01
      • 2023-03-12
      相关资源
      最近更新 更多