仅使用临时文件在 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, ...)
我正在尝试编写一个进程来下载 .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, ...)