2017-08-02 9 views
-1

120ラスタファイルのラスタスタックを作成しようとしています。私はこれらのファイルをループ内で生成し、生成されたラスタをラスタスタックに追加しています。コードは次のようになります。スタック機能は最後のラスタファイルをスタックするだけです

library(raster) 
stack_P_95 <- stack() 
for (i in startyear:endyear) 
{ 
file <- paste(indir,"\\prec_",i,".nc",sep="") 
command <- paste("cdo timmin ",file," ",workdir,"min.nc",sep="") 
system(command) 
command <- paste("cdo timmax ",file," ",workdir,"max.nc",sep="") 
system(command) 
command <- paste("cdo timpctl,95 ",file," ",workdir,"min.nc 
",workdir,"max.nc ",workdir,"P95_",i,".nc",sep="") 
system(command) 
grid <- raster(paste(workdir,"P95_",i,".nc",sep="")) 
stack_P_95 <- stack(stack_P_95,grid) 
} 
crs(stack_P_95) <- "+proj=utm +zone=45 +ellps=WGS84 +datum=WGS84 +units=m 
+no_defs" 
writeRaster(stack_P_95,paste(outdir,model,"_P95.nc",sep=""),format="CDF",overwrite=T) 

しかし、私は作成していますちょうど最後のラスター繰り返しn個を持ってstack_P_95(endyear -startyear)回。

この問題の原因は何ですか? このプロセス中にエラーまたは警告は生成されません。

私は私の入力ファイルと、最終的な出力とのリンクを追加しました: Input files

+0

再現可能な例を追加できますか?例えば、 'base'に' addLayer'という関数はありません。R. – drmariod

+1

私のために働きます。あなたのデータファイルがすべて同じではないと確信していますか? – Spacedman

+0

現在のディレクトリに年番号のグリッドを含むラスタファイルのテストセットを作成するコードは次のとおりです: 'r = raster(); for(i:2001:2004){r [] = i; writeRaster(r、paste0 #あなたのファイルを上書きするかもしれない#コードを実行すると、レイヤーに4つの年の値を持つ4層スタックが得られます。それは私のために働く。 – Spacedman

答えて

0

このコードを試してみてください。

作成し、いくつかの例ラスタ:

> library(raster) 
Loading required package: sp 
> for(i in 2001:2005){ r = raster(matrix(i,10,10)); writeRaster(r,paste0("temp_",i,".nc"))} 
Loading required namespace: ncdf4 

私に与える:

$ ls 
temp_2001.nc temp_2002.nc temp_2003.nc temp_2004.nc temp_2005.nc 

すべてが異なっている:

私は実行クリーンRセッションで
$ gdalinfo temp_2004.nc | grep max 
    layer#max=2004 
    max=2004 
$ gdalinfo temp_2001.nc | grep max 
    layer#max=2001 
    max=2001 

あなたのコード:

library(raster) 
workdir="./" 
stack_1 <- stack() 
startyear = 2001 
endyear = 2004 
for (i in startyear:endyear) 
{ 
tempnc <- raster(paste(workdir,"temp_",i,".nc",sep="")) 
stack_1 <- stack(stack_1,tempnc) 
} 

そして私は、4つの異なる層を有するスタックを取得する:あなたのコードとは異なり

> range(stack_1[[1]][]) 
[1] 2001 2001 
> range(stack_1[[2]][]) 
[1] 2002 2002 
> range(stack_1[[3]][]) 
[1] 2003 2003 

を、私のコードは完全に再現性があります。あなたがきれいなR環境で私のコードを実行し、すべてのレイヤーが "2004"の場合、あなたのシステムには何かがひどく間違っています。レイヤーが私のものと同じ場合は、ファイルやコードを表示していないことに間違いがあります。

+0

私は自分のコード全体と入力ファイルと出力ファイルを質問に追加しました。私は1つの操作からの出力を使用して、私の場合は動作していないスタックにそれを読み返しています。 – Anonymousaurav

0

はあなたのコードと間違って何もない

r <- list() # create list objects 

for (i in startyear:endyear) 
{ 
r[i] <- raster(paste(workdir,"temp_",i,".nc",sep="")) 
} 

rs <- stack(r) # create raster stack from list object 
+0

私が最初に出力を生成したら、提案した通りにそれらをリストアップして、スタッキングが機能します。しかし、ループ内でスタッキングがうまくいかない理由はわかりません。 – Anonymousaurav

関連する問題