2017-07-21 11 views
1

これはしばらくの間これに固執していました。答えはどこにでも見えましたが、私はスタック上で何かを見つけることができません。皆さんのお手伝いをさせていただければ幸いです。多くのラスタスタックを1つにまとめる関数を反復する

私の主な問題は、たくさんのnetcdf4ファイルをインポートし、それぞれのラスターブリックを作成し、変数ごとに「マスターブリック」を作るために多くのレンガを組み合わせる必要があるということです。あなたにもっと明確な例を挙げるために、私は40年(netcdf = 40)の気候変数(n = 15)を毎日解決しています。目標は月ごとに集計することですが、最初に、1つの大きなスタック内の1つの変数に対して、すべての年のnetcdfを読み込むこの関数を取得する必要があります。次のように私が今持っている何

読み取り:データの

# Libraries -------------------------------------------------------------- 
library(raster) 
library(ncdf4) 

# Directories ------------------------------------------------------------- 

tmp_dl <- list.files("/Users/NateM", pattern = "nc", 
       full.names = TRUE) 
# Functions --------------------------------------------------------------- 
rstlist = stack() 

netcdf_import <- function(file) { 
    nc <- nc_open(file) 
    nc_att <- attributes(nc$var)$names 
    ncvar <- ncvar_get(nc, nc_att) 
    rm(nc) 
    proj <- "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" 
    rbrck <- brick(ncvar, crs= proj) 
    rm(ncvar) 
    extent(rbrck) <- c(-124.772163391113, -67.06383005778, 25.0626894632975, 
         49.3960227966309) 
    }  

t <- for(i in 1:length(tmp_dl)) { 
     x <- netcdf_import(tmp_dl[i]) 
     rstlist <- stack(rstlist, x) 
     } 

allyears <- stack(t) 

二年はここで見つけることができます:

https://www.northwestknowledge.net/metdata/data/pdsi_2016.nc https://www.northwestknowledge.net/metdata/data/pdsi_2015.nc

すべてのヘルプは最も歓迎されるだろう。私はすべて前もってありがとうございます。もしこれが重複した投稿であれば、私はお詫び申し上げます。私は無駄に遠くに見えた。

答えて

1

コードは問題ありません。returnあなたの機能からロードされたブリックrbrckが必要です。そうしないと、エクステントが取得されます。

ロードとスタッキングについては、lapplyを使用して各データファイルに機能を適用することをお勧めします。これにより、1項目につき1年の素敵なリストが得られます。ここでもう少し処理を行い、最終的にリストにstackと呼んで "マスターブリック"を作り出すことができます。

# Libraries -------------------------------------------------------------- 
library(raster) 
library(ncdf4) 

# Directories ------------------------------------------------------------- 

tmp_dl <- list.files("/Users/NateM", pattern = "nc", 
        full.names = TRUE) 
# Functions --------------------------------------------------------------- 

netcdf_import <- function(file) { 
    nc <- nc_open(file) 
    nc_att <- attributes(nc$var)$names 
    ncvar <- ncvar_get(nc, nc_att) 
    rm(nc) 
    proj <- "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" 
    rbrck <- brick(ncvar, crs= proj) 
    rm(ncvar) 
    extent(rbrck) <- c(-124.772163391113, -67.06383005778, 25.0626894632975, 
        49.3960227966309) 
    return(rbrck) 
}  

# apply function 
allyrs <- lapply(tmp_dl,netcdf_import) 

# stack to master brick 
allyrs <- do.call(stack,allyrs) 

:私はあなたがここで40

だあなたの変更されたコードでそれを行う際に全部の大きさについてはよく分からないので、私は、二つのファイルでこれをやった

マインドHTH

+0

Hey Val - その編集に感謝して、魅力的に働いた!また、lapplyで提案していただきありがとうございます - 私はその機能をより良く使いこなす必要があります。どうもありがとう! –

関連する問題