1

我需要将一些 R 数据导出到格式化的 excel 文件,并且之前已经成功使用了 R 中的 XLConnect 和 xlsx 包。我最近搬到了 64 位 R 并且无法工作。我在一堆其他包中处理了一些 Oracle/Java 架构冲突。我确信这里发生了类似的事情,但我无法破解它。

当我打电话时library(XLConnect)rJava附上XLConnectJars没有问题。

这是错误和会话信息:

> library(XLConnect)
Loading required package: XLConnectJars
Error : .onLoad failed in loadNamespace() for 'XLConnect', details:
  call: .jfindClass(as.character(class))
  error: class not found
Error: package or namespace load failed for ‘XLConnect’

> sessionInfo()
R version 3.3.1 (2016-06-21)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] XLConnectJars_0.2-12

loaded via a namespace (and not attached):
[1] rsconnect_0.4.3 tools_3.3.1     rJava_0.9-8    

当我尝试附加xlsx.

> library(xlsx)
Loading required package: rJava
Loading required package: xlsxjars
Error : .onAttach failed in attachNamespace() for 'xlsx', details:
  call: .jnew("org/apache/poi/xssf/usermodel/XSSFWorkbook")
  error: java.lang.UnsupportedClassVersionError: Bad version number in .class file
Error: package or namespace load failed for ‘xlsx’

如果我切换到 32 位 R,一切都运行XLConnect良好xlsx。我真的需要运行 64 位 R 来满足其他要求。

4

1 回答 1

1

在不涉及技术细节的情况下,您将需要 64 位版本的 Java 来搭配 64 位版本的 R。

尽管这将解决您发布的问题,但我认为放弃基于 JavaXLConnectxlsx-packages 以连接到 Excel 会为您提供更多帮助。相反,请使用openxlsx-package。它与其他两个做同样的事情(是的,也导出格式化的 Excel 表格),但不依赖于 Java。

除了没有 Java 的 64 位/32 位问题外,还有一些优点:

首先,在处理大型表时,您不会遇到 OutOfMemoryErrors:

错误:OutOfMemoryError (Java):超出 GC 开销限制。

其次,即使基于 Java 的包没有显示错误,它们也可能需要很长时间才能处理大型表。openxlsx不存在这些问题。

最后和个人注意:一开始我在包之间切换时犹豫不决,但它解决了我不喜欢基于 Java 的包的所有问题,并且语法非常相似。

于 2016-11-02T09:32:57.577 回答