2016-07-12 34 views
0

Ich versuche eine Schleife zu erstellen, um automatisch einige GEOTiff-Datensätze mit dem Raster {Raster} hochzuladen. Zuerst habe ich den Ordner definiert, in dem alle meine Dateien mit der Variablen path gespeichert werden. Dann habe ich eine Schleife wie im folgenden Code erstellt, wobei crop_name ein Vektor ist, der den variablen Teil der Namen der GEOTiff-Datensätze enthält, die ich importieren möchte.Fehler beim Importieren von GeoTiff-Dateien - R RASTER-Paket

Dies ist der Code, den ich verwende:

path <- file.path("C:","Users","pbarbieri","Documents","Pietro","R Analysis", "Budgets test countries baseline scenario", "global", "crop prodution", "All") 

for (i in 1:length(crop_name)){ 

    name_file_upload <-paste(crop_name[i],"_Production.tif",sep = "") 
    path_2 <- file.path(path, name_file_upload) 
    name_file <- paste(crop_name[i], "production", sep = "_") 
    assign(name_file, raster(path_2)) 
} 

Wenn ich den Code ausführen, bekomme ich folgende Fehlermeldung:

Error in .local(.Object, ...) : 
    `C:\Users\pbarbieri\Documents\Pietro\R Analysis\Budgets test countries baseline scenario\global\crop prodution\All\barley_Production.tif' does not exist in the file system, 
    and is not recognised as a supported dataset name. 

Error in .rasterObjectFromFile(x, band = band, objecttype = "RasterLayer", : 
Cannot create a RasterLayer object from this file. (file does not exist) 

Dennoch, wenn ich versuche, manuell eine der importieren Die GEOTiff-Dateien verwenden den gleichen Pfad wie den, der in generiert und gespeichert wurde. Ich erhalte keinen Fehler. Ich habe gelesen, dass das {raster} -Paket manchmal Probleme mit Unterstrichen in den Dataset-Namen verursacht, aber das Löschen der Unterstriche hat mein Problem nicht gelöst. Was mache ich falsch?

Antwort

1

Dies sollte Ihre Probleme lösen:

dir <- "Path to files" 
    files <- list.files(path = dir, pattern = ".tif") 
    rasters <- lapply(paste0(dir, files), raster) 

Sie können mit der Liste von Rastern wie stack, lapply andere Funktionen über sie hier eine Tonne Dinge tun oder eine for Schleife verwenden, um ihnen ihre eigenen individuellen zuweisen Namen.

+0

Vielen Dank für den nützlichen Kommentar! Das vereinfacht tatsächlich alles! – PietroB

1

Verwenden assign ist eine schlechte Idee. Verwenden Sie stattdessen eine Liste verwenden und etwas tun, wie

x <- list() 
for() { 
    x[[i]] <- raster(path_2) 
} 

Aber wahrscheinlich das, was Sie wollen ist:

path <- file.path("C:/Users/pbarbieri/Documents/Pietro/R Analysis/Budgets test countries baseline scenario/global/crop prodution/All", 
    paste0(crop_name,"_Production.tif")) 
s <- stack(x) 

Es gibt keinen Grund ist die Materie zu denken unterstreicht.