У меня есть несколько файлов .xls (~ 100 МБ), из которых я хотел бы загрузить несколько листов (из каждого) в 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
- спасибо!
ОБНОВИТЬ:
Похоже, что некоторые пользователи могут открыть указанный выше файл с помощью функции readxl::read_xls
, в то время как другие не могут, как на Mac, так и на Windows, использовать самые последние версии R
, Rstudio
и readxl
. Проблема была опубликована на readxl GitHub и еще не решена.