write.xlsx 功能不工作

write.xlsx function not working

我正在尝试使用 .xlsx 库,但函数 write.xlsx 正在返回无法找到此类库的错误。

当我在日志中安装库 (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 是最新的。

xlsx 需要 Java。请安装来自 https://www.java.com/de/

的当前 Java 版本

注意,R 和 java 都是 32 位或 64 位的,正如错误消息中所述

... and make sure R and Java have matching architectures.

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

原始post中的代码失败,因为xlsx包使用了Apache POIJavaAPI到Excel,因此需要 rJava 包。反过来,rJava 包需要一个工作的、兼容的版本 Java 运行时环境安装在机器上并从 R 访问。

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

> 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 比 "install 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 page,包括执行 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