2017-07-10 9 views
0

名前に基づいて多数の.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。どうもありがとう!

答えて

1

あなたの質問を正しく読んだ場合、あなたは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))) 

これはあなたの素敵なリストをハイブすべきです3つのラスタスタック(yrで定義されているように、毎年1つ)ディスクからファイルを一緒にスタックするには、stackを使用する必要があります。それでもラスターレンガである必要がある場合は、brickでそれらを隠すことができます。

+0

ありがとうございます! 'glob2rx(" AG_2000 _ * _ 1.asc ")'と 'glob2rx(" AG_2000 _ * _ 2.asc ")'(例:AG_2000_02_2.asc、AG_2000_11_1.asc)という名前の両方のタイプのファイルのリストを作成したい場合、how続行します?私の推測では、 'glob2rx(" AG_2000 _ * _ [1-2] {1} .asc ")'と書かれていましたが、動作しません。 – Cecile

+1

私は正規表現を直接使用します。この場合、 '' AG_2000 _ \\ d {2} _(1 | 2).asc $ "'はこのトリックを行うべきです。 '\\ d {2}'は2桁を参照し、 '(1 | 2)'は単純な1または2の操作です。角かっこは、orの操作を文字列のサブグループに限定します – Val

関連する問題