我有多个 .xls (~100MB) 文件,我想从中加载多个工作表(每个文件)到 R 中作为数据框。我尝试了各种函数,例如 xlsx::xlsx2
和 XLConnect::readWorksheetFromFile
,但它们总是运行很长时间(>15 分钟),永远无法完成,我不得不强制退出 RStudio 才能继续工作。
我还尝试了 gdata::read.xls
,它确实可以完成,但每个工作表需要超过 3 分钟的时间,并且它无法一次提取多个工作表(这将非常有助于加快我的流程),就像 XLConnect::loadWorkbook
可以做到的那样。
这些函数执行所需的时间(我甚至不确定前两个是否会在更长时间内完成)对于我的流程来说太长了,我需要同时处理许多文件。有没有办法让它们更快地运行/完成?
在几个地方,我看到了使用函数 readxl::read_xls
的建议,它似乎被广泛推荐用于此任务,并且应该比每个工作表更快。然而,这个函数给了我一个错误:
> # Minimal reproducible example:
> setwd("/Users/USER/Desktop")
> library(readxl)
> data <- read_xls(path="test_file.xls")
Error:
filepath: /Users/USER/Desktop/test_file.xls
libxls error: Unable to open file
我还进行了一些初步测试,以确保文件存在且格式正确:
> # Testing existence & format of the file
> file.exists("test_file.xls")
[1] TRUE
> format_from_ext("test_file.xls")
[1] "xls"
> format_from_signature("test_file.xls")
[1] "xls"
以上使用的test_file.xls
文件可以在这里找到。
如果您有关于如何使第一个函数运行更快或使read_xls
运行的任何建议,我们将不胜感激 - 谢谢!
更新(2019年12月14日):
似乎一些用户能够使用readxl::read_xls
函数打开上面的文件,而另一些用户则不能,在Mac和Windows上都是如此,使用最新版本的R
、Rstudio
和readxl
。问题已经发布在readxl GitHub上,但尚未解决。
readxl
包,重启RStudio并重新安装readxl
。 同时尝试更新R和RStudio到最新版本(如果您的版本已过时)。 - red_quarkRcpp
包,这需要Xcode
(适用于OSX),这些都是 R 外部的依赖项。readxl
包打开您的Excel文件(例如,v.1.3.0、1.2.0、1.1.0等;所有存档版本都可以在此处找到:https://cran.r-project.org/src/contrib/Archive/readxl/)。您可以按照以下方式安装它(例如):if(!require(readxl)) { install.packages("https://cran.r-project.org/src/contrib/Archive/readxl/readxl_1.2.0.tar.gz", repos = NULL, type="source"); suppressPackageStartupMessages(require(readxl))}
P.S. 在链接中,您可以指定任何存档包的版本。 - red_quarkreadxl
包加载Excel文件之前,我没有修改或打开过它。 我在Windows 10 Enterprise上运行代码(RAM 16 GB,64位)。 但是!当我尝试在RStudio Server(Ubuntu)中读取您的Excel文件时,我遇到了相同的错误:“libxls错误:无法打开文件”。 - red_quark> sessionInfo() R version 3.6.1 (2019-07-05) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows >= 8 x64 (build 9200)
(Windows:Windows 10企业版,版本1803,OS构建17134.1006。处理器:Intel Core i7-8550U,64位操作系统)。 RStudio - 版本1.1.456(2018年7月19日) - red_quark