2017-07-03 5 views
1

Ich habe ein großes Verzeichnis mit 365 Unterverzeichnissen, die Bilder für jeden Tag des Jahres enthalten. Ich habe eine Funktion erstellt, die ich auf jedes Bild in diesen Unterverzeichnissen anwenden möchte. Im Moment ist es das, was ich habe:Iterate durch Unterverzeichnisse in For-Schleife in R

library(raster) 
library(zebu) 

#List all of the 365 sub-directories within my main directory 
days <- list.files(full.names = F , recursive =F, pattern='*X2000*') 

#Apply my function to each directory within "days" 
for(j in 1:length(days)){ 

    named <- paste0("full_",j) 

    in.list <- list.files(recursive = T, full.names = F) 

    stitched <- mosaicList(in.list) 

    writeRaster(stitched, path='D:/Scratch/DataConvert/Daymet_Data/Full/' , 
    filename=named, overwrite=TRUE) 
} 

Das Ziel dieser Schleife ist die Funktion „mosaicList“, um die Bilder in jedem Unterverzeichnis anzuwenden. Das Problem ist, dass beim Ausführen der for-Schleife das Objekt "in.list" dieselben Unterverzeichnisse wie "Tage" enthält, anstatt die Bilder in den Unterverzeichnissen aufzulisten. Als Ergebnis wird versucht, meine Funktion für jedes Unterverzeichnis zur gleichen Zeit, und ich bekomme den Fehler

Error: cannot allocate vector of size 14.2 Gb 

Ich bin neu in R zu laufen, so bin ich nicht ganz sicher, wo ich falsch gegangen. Hat jemand einen Einblick in die Behebung dieses Problems?

Antwort

0

Es gibt ein Problem mit den list.files in der Schleife:

in.list <- list.files(recursive = T, full.names = F) 

Der Standardpfad Parameter für list.files ist, die das aktuelle Verzeichnis "". Vielleicht zu:

in.list <- list.files(path=days[j], recursive = T, full.names = T) 

Wird behoben.

+0

Als ich Ihren Vorschlag ausprobierte, endete mein Objekt 'in.list' leer. Wenn ich meine erste Zeile in 'for ((j in 1: length (days)) {' ändere und deinem Vorschlag folge, wird meine 'in.list' erstellt und listet die Bilder im Verzeichnis richtig auf, aber j wird stattdessen' 1L' von dem Bild, das es sein soll – ColinB

+0

Hoppla, ich habe 'full.names = T' nicht geändert. Ich habe die Änderung vorgenommen und es funktioniert jetzt. Danke für die Hilfe! – ColinB