2016-06-21 13 views
1

ラスターレイヤーについてstack()ラスタレイヤーに関する質問があります。ラスターレイヤーの{raster}スタック

通常Iようなstack()ラスターレイヤー:

stack(RasterLayer1,RasterLayer2,RasterLayer3) # e.g. for 3 Layers 

私の質問は、どのようにすることができます私はstack()ラスタレイヤごとにラスターレイヤーを入力せずに?

たとえば、nは、ラスターレイヤーの量(例:12)です。すべてbandとなります。

私はのレイヤーを作成しました。ラスターレイヤーの名前をn倍入力することなく、すべてレイヤーを作成したいと思います。だからではなく、タイピングの:

stack(band1,band2,band3,band4,band5,band6,band7,band8,band9,band10,band11,band12) 

私はそのstack(band[n])によって短くしたいが、それは動作しません。

すべてのバンドのリストを作成しても、作成したばかりのワーキングディレクトリには表示されないので、そのリストをスタックできません。

誰でも助けてくれますか?

+0

スタックは、ラスタのリスト、またはファイル名のベクトルをとり、または複数のバンドを持つ単一のファイル名。私たちは、あなたが持っているもの、ファイルのフォルダ、またはループに関するさらに詳しい情報が必要ですか?オブジェクトを作成する、または? lapply、ls、getを使用してワークスペース内のフリーフローティング名を照合することはできますが、少しは解除する方が良い – mdsumner

+0

ループで読み込んだラスターデータを名前を変更し、すべての単一レイヤーを再サンプリングします。最後に、私は自分の作業ディレクトリにある元のラスタデータとは異なる名前のn個のラスタレイヤを持っています。そのため、名前を変更して再サンプリングしたラスターレイヤーを保存しないため、list.files()が機能しません。ラスタレイヤーがリストから作業ディレクトリにない場合、スタックすることが可能かどうかはわかりません。 –

答えて

0

ここではmgetを使用して他のアプローチです:

# Generate some data 
library(raster) 
r <- raster() 
r[] <- runif(ncell(r)) 
for (i in 1:10) assign(paste0("r", i), r) 

# create a stack  
stack(mget(ls(pattern = "^r.+"))) 
+0

ありがとうございます!!!!私は既にあなたのように私のラスターレイヤーの名前を付けましたが、私はmgetを聞いたことはありません。あなたが提案したように、stack.band < - stack(mget(ls(pattern = "band。+")))で試してみました。どうもありがとうございます!!!! –

+0

素晴らしいですが、一般的にこれをしないでください。 – mdsumner

+0

どういう意味ですか?何故なの? –

1

band1、band2、...のような別々の変数の下にそれらを保存するのではなく、それらをリストに保存することをお勧めします。ここでは例:

#Create empty rasters 
ras1<- raster() 
ras2<- raster() 

#Initialise and append to list 
list_ras <- list() 
list_ras[[1]] <- ras1 
list_ras[[2]] <- ras2 

#Stack single bands 
ras_stack <- stack(list_ras[[1]], list_ras[[2]]) 

#Stack all bands 
ras_stack <- stack(list_ras) 
1

あなたのデータがディレクトリにある場合は、例えば検索パターン(使用することができます*。TIF、*を。 grd、...)、変数に格納します。

bands <- list.files(path=".",pattern="*.tif",full.names=TRUE,recursive=TRUE) 

は今、あなたのデータが呼び出されることを前提としています

band_01.tif 
band_02.tif 
band_03.tif 
band_04.tif 
band_05.tif 
band_06.tif 
band_07.tif 

、あなたは、たとえばスタックすることができます:

data_stack <- stack(bands) #stack all data 
data_stack <- stack(bands[1:3]) #stack 1,2 and 3 data 
data_stack <- stack(bands[c(1,3,5,7)]) 
関連する問題