2016-07-12 3 views
0

Я пытаюсь создать цикл для автоматической загрузки некоторых наборов данных GEOTiff, используя растровый {растр}. Во-первых, я определил папку, в которой все мои файлы сохранены с помощью переменной path. Затем я создал цикл, как в приведенном ниже коде, где crop_name - это вектор, содержащий переменную часть имен наборов данных GEOTiff, которые я хочу импортировать.Ошибка при импорте файлов GeoTiff - пакет R RASTER

Это код, который я использую:

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)) 
} 

Когда я запускаю код, я получаю следующее сообщение об ошибке:

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) 

Тем не менее, если я пытаюсь импортировать вручную один из файлы GEOTiff, используя тот же путь, что и сгенерированный и сохраненный в path_2, я не получаю никаких ошибок. Я читал, что когда-то пакет {raster} может создавать проблемы с подчеркиваниями в именах наборов данных, но удаление подчеркиваний не помогло решить мою проблему. Что я делаю не так?

ответ

1

Это должно решить ваши проблемы:

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

Вы можете сделать тонны вещей здесь со списком растров, такими как stack, lapply других функций через них или использовать for цикл, чтобы присвоить им свою индивидуальность имена.

+0

Большое спасибо за полезный комментарий! Это действительно упрощает все! – PietroB

1

Использование assign - плохая идея. Вместо этого используйте список и сделать что-то вроде

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

Но, вероятно, что вы хотите:

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) 

Там нет никаких оснований думать, подчеркивает вопрос.

Смежные вопросы