write.xlsx函数无法正常工作

7

我正在尝试使用.xlsx库,但是write.xlsx函数返回错误,说找不到这个函数。

当我安装library(xlsx)时,在日志中我可以看到:

Error : .onLoad nie powiodło się w funkcji 'loadNamespace()' dla pakietu 'rJava', szczegóły:
  wywołanie: fun(libname, pkgname)
  błąd:  No CurrentVersion entry in Software/JavaSoft registry! Try re-installing Java and make sure R and Java have matching architectures.
In addition: Warning messages:
1: pakiet ‘xlsx’ został zbudowany w wersji R 3.3.2 
2: pakiet ‘rJava’ został zbudowany w wersji R 3.3.3 
Error: pakiet ‘rJava’ nie mógł zostać załadowany

Java已经更新到最新版本。


3
你可以尝试使用openxlsx,它不依赖于Java。 - Jaap
@Jaap 已安装并运行了 readxl 库。那么这是 JAVA 的问题吗? - RafMil
@RafMil - 需要使用writexl来输出。请查看我的答案,其中包含writexl::write_xlsx()的工作示例。 - Len Greski
2个回答

15

原始帖子中的代码无法正常运行,因为 xlsx 包使用了 Apache POI 的 Java API 处理 Excel 文件,因此需要安装 rJava 包。而 rJava 包又必须要求机器上安装并能够从 R 中访问可用的、兼容版本的 Java 运行环境。

可以通过 system() 函数来判断 Java 是否可以从 R/RStudio 中访问。

> system("java -version")
java version "13.0.2" 2020-01-14
Java(TM) SE Runtime Environment (build 13.0.2+8)
Java HotSpot(TM) 64-Bit Server VM (build 13.0.2+8, mixed mode, sharing)
> 

至少有四套 R 包可用于处理 Excel 文件,包括:

  1. xlsx -- 需要 rJava 包
  2. XLConnect -- 需要 rJava 包
  3. openxlsx -- 不需要 rJava 包
  4. readxl / writexl -- 不需要 rJava 包

对于选项 3 和 4,解决方案很简单,只需使用 install.packages() 安装所需的包(如 @Linus 另一个答案中所述),一旦您将 R 更新到最新版本即可。

install.packages("openxlsx") 
library(openxlsx)
或者
install.packages(c("readxl","writexl")) 
library(readxl)
library(writexl)

一个工作示例:将内容写入Excel文件

library(writexl)
data <- data.frame(matrix(runif(100),nrow=10,ncol=10))
write_xlsx(data,"./data/simpleExcel.xlsx")

...并输出:

在此输入图像描述

如果必须使用rJava...

不幸的是,选项1和2比“安装Java”要复杂得多。如果必须使用xlsx或需要rJava包来支持其他R软件包,则根据操作系统安装Java会有很大差异。

Windows:必须安装与R兼容的Java版本(即32位与64位),可以考虑同时安装32位和64位版本,因为计算机上安装的某些Windows程序可能需要32位Java而非64位。在RStudio中,如果计算机上只安装了32位Java,则可以配置R使用32位版本的R。

Mac OS X:必须安装Java,并执行一系列命令,这些命令在rJava Issues GitHub页面上有说明,包括执行一个R脚本重新为R配置Java。

Linux:需要使用适合该Linux版本的软件包安装工具安装Java,然后配置R以使用它。例如,在Ubuntu中,可以使用高级打包工具进行安装。

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

3

xlsx需要Java。请从https://www.java.com/de/安装最新的Java版本。

请注意,R和Java都必须是32位或64位,正如错误信息中所述。

请确保R和Java具有匹配的架构。

或者使用writexlsopenxlsx。它们不依赖于Java(感谢@Len)。


2
OP询问如何编写Excel文件,因此正确的包是writexl,而不是readxl。 - Len Greski
谢谢。这个库可以无错误运行。那么是JAVA版本过期或类似的问题吗?R和JAVA的架构是相同的。感谢大家的帮助。 - RafMil
1
@RafMil - 诊断Java问题所需的第一件事是知道您使用的操作系统。正如我在回答这个问题时所指出的,安装Java运行时与R的方式因操作系统而异。 - Len Greski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接