Получение одной переменной из нескольких файлов NetCDF с помощью цикла в R

Если у меня есть n файлов с именами nc.data_1, nc.data_2 ... nc.data_n, как я могу получить одну и ту же переменную из всех файлов и сохранить их в одном массиве в R? (т.е. (а) получение времени, затем (б) получение данных об осадках с размерами: [долгота, широта, время] = [144, 91, 24] из n файлов соответственно). Код ниже - это то, что я сделал до сих пор.

Путь к данным: https://www.dropbox.com/sh/m8u3xwm5za7m7mc/AACHq2AjeZaxHm1sEhaOJ_g2a/2011?dl=0

## Call library functions for future plot
library(abind)
library(fields)
library(maps)
library(ncdf4)

## create an empty list that saves the incoming files
nc.data<-list()
list.filenames<-list.files(pattern = ".nc")

## Read in all data files using a loop
for(i in 1:length(list.filenames)){
nc.data[[i]]<-nc_open(list.filenames[[i]])
}

## Getting lat and lon from a single file since they're the same for all files
lat_2x25 <- ncvar_get(nc.data[[1]], 'lat')
lon_2x25 <- ncvar_get(nc.data[[1]], 'lon')

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


person Chow    schedule 29.11.2017    source источник
comment
Почему бы просто не использовать raster::stack(x) или raster::brick(x), где x - это список имен файлов, которые вы хотите сложить. Тогда я бы, вероятно, сохранил их в виде кирпичей или стеков (гораздо лучше для пространственных данных, чем массив), но если вам действительно нужен массив, тогда as.array - ваш друг.   -  person dww    schedule 30.11.2017
comment
Вы пробовали решение, приведенное ниже? Было ли это полезно?   -  person Adrian Tompkins    schedule 14.02.2018


Ответы (1)


Не решение R, но если в linux вы можете сначала просто использовать CDO (я предполагаю, что вы написали имя файла задом наперед, поскольку расширение ".nc" обычно идет в конце):

cdo merge data_*.nc merge_file.nc
cdo selvar,variable_name merge_file.nc variable.nc

тогда вы можете просто открыть и прочитать последнее в R.

person Adrian Tompkins    schedule 30.11.2017