【问题标题】:Download, unzip, and load Excel file in R using tempfiles only仅使用临时文件在 R 中下载、解压缩和加载 Excel 文件
【发布时间】:2015-07-23 13:42:06
【问题描述】:

我正在尝试编写一个下载 .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() 指向连接而不是文件有关,但我不确定这是否正确,如果是,我不知道如何修复它。我在 stackoverflow 和网络上搜索了答案,但找不到正确的答案。非常感谢您的帮助。

【问题讨论】:

    标签: r excel download unzip temp


    【解决方案1】:

    正如你所说,这是因为 unz 返回 zip 中文件的连接对象(但没有显式解压缩该文件),而 readWorksheetFromFile 需要文件的路径。

    使用unzip 显式解压缩文件。

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

    【讨论】:

      猜你喜欢
      • 2021-12-03
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多