仅使用tempfiles下载,解压缩和加载R中的Excel文件

我正在尝试写一个下载.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行之后popup的那个,试图将电子表格接收为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()指向连接而不是文件有关,但我不确定是否正确,如果是这样,我不知道该如何解决。 我searchstackoverflow和networking的答案,但无法find一个正确的点。 我真的很感激一些帮助。

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

使用unzip来显式解压缩文件。

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