仅使用临时文件在 R 中下载、解压缩和加载 Excel 文件

Download, unzip, and load Excel file in R using tempfiles only

我正在尝试编写一个进程来下载 .zip 存档,从该存档中提取特定的 Excel 文件,然后将该 Excel 文件加载到我的 R 工作区中,但从未成功将任何这些文件(.zip 或 .xls)写入我的硬盘。

我已经编写了适用于压缩 .csvs 的此过程的一个版本,但不适用于 .xls。这是该版本的运行方式,使用我在当前项目中定位的 URL 之一,并在适当的时候使用 readWorksheetFromFile() 而不是 read.csv()

library(XLConnect)
waed.old.link <- "http://eventdata.parusanalytics.com/data.dir/pitf.world.19950101-20121231.xls.zip"
waed.old.file <- "pitf.world.19950101-20121231.xls"
tmp <- tempfile()
download.file(waed.old.link, tmp)
tmp2 <- tempfile()
tmp2 <- unz(tmp, waed.old.file)
WAED.old <- readWorksheetFromFile(tmp2, sheet = 1, startRow = 3, startCol = 1, endCol = 73)
unlink(tmp)
unlink(tmp2)

这是第 8 行之后弹出的内容,它试图将电子表格提取为 WAED.old:

Error in path.expand(filename) : invalid 'path' argument

我在那一步也尝试了 read_excel() 并得到了相同的结果:

> WAED.old <- read_excel(tmp2, skip = 2)
Error in file.exists(path) : invalid 'file' argument

我认为这与将 readWorksheetFromFile() 指向连接而不是文件有关,但我不确定这是对的,如果是的话我不知道如何修复它.我在 Whosebug 和网络上搜索了答案,但找不到正确的答案。非常感谢您的帮助。

正如您所说,这是因为 unz returns zip 中文件的连接对象(但未明确解压缩该文件),而 readWorksheetFromFile 需要路径到一个文件。

使用 unzip 显式解压缩文件。

tmp2 <- unzip(zipfile=tmp, files = waed.old.file, exdir=tempdir())
# readWorksheetFromFile(tmp2, ...)