R Чтение в файле данных zip без его разархивирования
У меня очень большой zip файл, и я пытаюсь прочитать его в R, не распаковывая его так:
temp <- tempfile("Sales", fileext=c("zip"))
data <- read.table(unz(temp, "Sales.dat"), nrows=10, header=T, quote="\"", sep=",")
Error in open.connection(file, "rt") : cannot open the connection
In addition: Warning message:
In open.connection(file, "rt") :
cannot open zip file 'C:\Users\xxx\AppData\Local\Temp\RtmpyAM9jH\Sales13041760345azip'
Ответы
Ответ 1
Если ваш zip файл называется Sales.zip
и содержит только файл с именем Sales.dat
, я думаю, вы можете просто сделать следующее (предполагая, что файл находится в вашем рабочем каталоге):
data <- read.table(unz("Sales.zip", "Sales.dat"), nrows=10, header=T, quote="\"", sep=",")
Ответ 2
Не нужно использовать unz, так как теперь read.table может обрабатывать сжатый файл напрямую:
data <- read.table("Sales.zip", nrows=10, header=T, quote="\"", sep=",")
См. этот пост
Ответ 3
Какую версию R вы используете? Возможно, стоит попробовать последний стабильный выпуск (из проекта, а не из дистрибутива, который может быть позади).
Я видел, что эта ошибка встречается в более старых версиях, но не самая последняя, при запуске одинаковых команд с использованием unz
в обоих.
Ответ 4
Если у вас установлена zcat в вашей системе (это относится к linux, macos и cygwin), вы также можете использовать:
zipfile<-"test.zip"
myData <- read.delim(pipe(paste("zcat", zipfile)))
Это решение также имеет то преимущество, что временные файлы не создаются.
Ответ 5
Методы пакета readr
также поддерживают сжатые файлы, если суффикс файла указывает природу файла, то есть файлы, заканчивающиеся в .gz,.bz2,.xz или .zip будет автоматически несжатым.
require(readr)
myData <- read_csv("foo.txt.gz")