我需要从互联网上下载压缩的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)
我认为此处writeBin
,unzip
和read.csv
使用昂贵的磁盘I / O,但我不知道如何改进它。
答案 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)