Мне нужно автоматизировать R, чтобы прочитать файл данных csv, который находится в zip файле.
Например, я бы напечатал:
read.zip(file = "myfile.zip")
И внутренне, что будет сделано:
- Разархивировать
myfile.zip
во временную папку - Прочитайте единственный файл, содержащийся на нем, с помощью
read.csv
Если в zip файл находится более одного файла, возникает ошибка.
Моя проблема заключается в том, чтобы получить имя файла, содержащегося в zip файле, в orded, чтобы предоставить ему команду read.csv
. Кто-нибудь знает, как это сделать?
UPDATE
Здесь функция, которую я написал на основе ответа @Paul:
read.zip <- function(zipfile, row.names=NULL, dec=".") {
# Create a name for the dir where we'll unzip
zipdir <- tempfile()
# Create the dir using that name
dir.create(zipdir)
# Unzip the file into the dir
unzip(zipfile, exdir=zipdir)
# Get the files into the dir
files <- list.files(zipdir)
# Throw an error if there more than one
if(length(files)>1) stop("More than one data file inside zip")
# Get the full name of the file
file <- paste(zipdir, files[1], sep="/")
# Read the file
read.csv(file, row.names, dec)
}
Поскольку я буду работать с большим количеством файлов внутри tempdir()
, я создал новый dir внутри него, поэтому я не путаюсь с файлами. Надеюсь, это будет полезно!