Я почти уверен, что однажды ответил на этот вопрос.В результате Соединения API R (file()
, url()
, pipe()
, ...) могут выполнять декомпрессию на лету, я не думаю, что вы можете сделать это для удаленных объектов http.
То же самое вы сделали из двух шагов: используйте download.file()
с результатом tempfile()
в качестве второго аргумента, чтобы получить сжатый файл, а затем прочитать из него.Как объект tempfile()
, он будет очищен автоматически в конце сеанса R, поэтому я могу предложить одно небольшое исправление - пропустить unlink()
(но тогда мне нравятся явные очистки, так что вы можете также оставить его).
Редактировать: Понял:
con <- gzcon(url(paste("http://dumps.wikimedia.org/other/articlefeedback/",
"aa_combined-20110321.csv.gz", sep="")))
txt <- readLines(con)
dat <- read.csv(textConnection(txt))
dim(dat)
# [1] 1490 19
summary(dat[,1:3])
# aa_page_id page_namespace page_title
# Min. : 324 Min. :0 United_States : 79
# 1st Qu.: 88568 1st Qu.:0 2011_NBA_Playoffs : 52
# Median : 2445733 Median :0 IPad_2 : 43
# Mean : 8279600 Mean :0 IPod_Touch : 38
# 3rd Qu.:16179920 3rd Qu.:0 True_Grit_(2010_film): 38
# Max. :31230028 Max. :0 IPhone_4 : 26
# (Other) :1214
Ключ был подсказкой gzcon
справки, которая может привести к распаковке вокруг существующего потока.Затем нам понадобится небольшой обход readLines
и чтение с помощью textConnection
из этого, поскольку read.csv
хочет перемещаться в данных назад и вперед (я полагаю, для проверки ширины столбца).