在R中解压缩内存中的原始文件

时间:2015-08-22 20:00:24

标签: r zip

我需要从互联网上下载压缩的csv文件,将其解压缩并将其作为data.frame加载到内存中。有没有办法只在没有读/写磁盘的情况下才能在内存中完成整个过程?这就是我的尝试:

library(RCurl)
file <- getURL(url, userpwd='user:pwd')
tf <- tempfile()
writeBin(content(file, "raw"), tf)
tf <- unzip(tf, exdir=tempdir())
data <- read.csv(tf)
unlink(tf)

我认为此处writeBinunzipread.csv使用昂贵的磁盘I / O,但我不知道如何改进它。

1 个答案:

答案 0 :(得分:0)

我认为使用unz()的这个示例可以通过打开与Zip存档中单个文件的连接来让您更接近,但如果unz()函数实际上没有解压缩到磁盘,我会感到惊讶,我还没检查过:

##  Create a sample data.frame object:
d <- data.frame(a=rnorm(40), b=rnorm(40))

##  Write this data.frame to two separate CSV files, and zip
##    them together into a new archive:
write.csv(d, file="d.csv")
write.csv(d, file="d_2.csv")
zip("d.zip", c("d.csv", "d_2.csv"))

##  In this case, we will open a file connection to a single file 
##    inside the zip archive, and read the data in using read.csv():
f <- unz("d.zip", "d_2.csv")
a <- read.csv( f )
head(a)