Откройте список файлов .asc и создайте кирпич или стопку

Я хотел бы создать кирпичный растр из большого количества файлов .asc на основе их имен. Я пробовал несколько способов (см. ниже), но безуспешно:

setwd("C:/")
b <- brick(list.files(pattern = glob2rx("total_aground_live_biomass_2000_*_*.asc")))
b <- brick(system.file(pattern = glob2rx("total_aground_live_biomass_2000_*_*.asc"), package = "Raster"))

Может ли кто-нибудь помочь мне? Мне также интересно, как использовать glob2rx только для чтения файлов со следующим шаблоном: total_aground_live_biomass_[только годы 1995, 2000, 2005]__*.asc. Большое спасибо!


person Cecile    schedule 10.07.2017    source источник


Ответы (1)


Если я правильно понял ваш вопрос, у вас есть .asc файлов за разные годы, которые вы хотите сложить вместе по годам.

Предполагая, что файлы находятся в одном каталоге (для простоты назовем его datadir) и имеют согласованное соглашение об именах, я бы сделал это так:

library(raster)

#vector of years
yr <- c('1995','2000','2005')

# file name pattern
patt <- 'total_aground_live_biomass_(*.).asc$' 

#list files, optionally without recursive
fls <- list.files(datadir,patt,full.names=TRUE,recursive=TRUE)

#stack files per year
stcks <- lapply(yr,function(x) stack(grep(x,fls,value=TRUE)))

Это должно дать вам хороший список из трех растровых стеков, по одному на каждый год, как определено в yr. Вам нужно использовать stack для объединения файлов с диска вместе. Если после этого вам все еще нужно, чтобы они были растровыми кирпичиками, вы можете просто скрыть их с помощью brick.

person Val    schedule 10.07.2017
comment
Спасибо! Если я хочу создать список файлов с именами обоих типов glob2rx("AG_2000_*_1.asc") и glob2rx("AG_2000_*_2.asc") (например, AG_2000_02_2.asc, AG_2000_11_1.asc), что делать? Я догадался написать glob2rx("AG_2000_*_[1-2]{1}.asc"), но это не работает - person Cecile; 10.07.2017
comment
Я бы напрямую использовал регулярное выражение. В этом случае "AG_2000_\\d{2}_(1|2).asc$" должен помочь. \\d{2} ссылается на две цифры, а (1|2) — на простую операцию 1 или 2. Скобки ограничивают операцию или подгруппой строки - person Val; 10.07.2017