Ответ 1
Я почти уверен, что однажды ответил на этот вопрос. Результатом является то, что Подключения 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
хочет идти туда и обратно в данных (для проверки ширины столбца, я полагаю).