2016-05-07 7 views
0

Ich habe eine folgende Ordnerstruktur in einer ZIP-Datei „imgs.zip“Lese Bilder (JPEG) aus einem ZIP-Ordner

names.files <- unzip("imgs.zip","test",list=TRUE) 
names.files$Name[3] 
[1] "test/img_10.jpg" 

den folgenden Code unter Verwendung des Bildes

readJPEG(unz("imgs.zip",names.files$Name[3])) 

ich zu lesen erhält die Fehlermeldung

Fehler in path.expand (Quelle): ungültiges 'Pfad' Argument

Ich habe versucht, Bilder aus einem gezippten Ordner in R zu lesen, aber alles bisher vergebens.

+0

Was ist das Arbeitsverzeichnis? d. h. 'getwd()' Eventuell müssen Sie 'paste' verwenden, um den richtigen Pfad zu erhalten. zB 'paste (" C: \ irgendein \ datei \ pfad ", names.files $ Name [3], sep =" \ ")' oder so – akrun

+0

@akrun Die Zip-Datei '' 'imgs.zip''' befindet sich im Arbeitsverzeichnis. –

+0

Da die Ausgabe von 'names.files $ Name [3]' ist '" test/img_10.jpg "', müssen Sie möglicherweise den Pfad korrekt angeben – akrun

Antwort

1

Verwenden unzip sowohl die Dateinamen zu extrahieren und für die Dateien zu lesen:

library(jpeg) 
# Select your Zip file or replace file.choose() with exact path 
zippath <- file.choose() 
names.files <- unzip(zippath, list=TRUE) 
readJPEG(unzip(zippath, names.files$Name[3])) 

Keine Notwendigkeit paste zu verwenden.

+1

Ich frage mich, warum eine Verbindung zur Quelle nicht von '' 'readJPEG''' Funktion verwendet werden kann. –

2

Ich glaube nicht, dass Sie eine gezippte Bilddatei über unz lesen können. Kurz gesagt, readJPEG sucht nach einem Dateipfad, keine Verbindung, was unz Ihnen gibt.

Blick auf die Art der Ausgabe gibt es Ihnen:

> test <- (unz("figure.zip", names.files$Name[3])) 
> test 
        description       class       mode       text 
"figure.zip:figure/age_all.png"       "unz"        "r"       "text" 
         opened      can read      can write 
         "closed"       "yes"       "yes" 
> str(test) 
Classes 'unz', 'connection' atomic [1:1] 6 
    ..- attr(*, "conn_id")=<externalptr> 

readJPEG eine Filepath zu einem nicht komprimierten Bildes erwartet, nicht, was diese unz Verbindung ist. Insbesondere ist dies, wo es versagt:

source <- path.expand(source) 

Wo Quelle in Ihrem Fall ist die Ausgabe von unz.