У меня есть несколько файлов netcdf, которые представляют собой ежедневные климатические данные с разрешением 1/2 градуса для всего земного шара в течение 10 лет; каждый слой имеет данные за 1 год. Каждый файл состоит из одной переменной (hurs в примере ниже) с тремя измерениями - lat, long и time. Я хочу создать месячные индексы, чтобы я мог усреднять или суммировать данные по месяцам (и, возможно, другим периодам, например, 3 месяца windows).
Меня интересуют только данные о климате на суше. Обрезка кирпича до уровня земли имеет преимущество, заключающееся в уменьшении размера файла с примерно 2,2 ГБ до 0,8 ГБ, что ускоряет работу, а также создает новые сложности.
В приведенном ниже коде я читаю файл netcdf как кирпич с именем temp и использую nc_open для создания ncin, использую данные wrld_land для обрезки temp и затем пытаюсь записать результат в новый файл netcdf. Названия слоев в растровом кирпиче выглядят как "X2015.01.01" "X2015.01.02" "X2015.01.03" "X2015.01.04" "X2015.01.05" "X2015.01.06"
. Я создаю индексы с indices <- format(as.Date(names(ncin.brick), format = "X%Y.%m.%d"), format = "%m")
library(ncdf4)
library(raster)
library(maptools)
data(wrld_simpl)
wrld_land <- subset(wrld_simpl, !NAME == "Antarctica")
fileNameIn <- "/Volumes/PassportMac/ISIMIP/cmip6/ssp585/MPI-ESM1-2-HR/mpi-esm1-2-hr_r1i1p1f1_w5e5_ssp585_hurs_global_daily_2015_2020.nc"
ncin <- nc_open(fileNameIn)
temp <- brick(fileNameIn)
head(names(temp))
temp <- readAll(temp)
tempCropped <- crop(temp, extent(wrld_land))
tempCropped <- mask(tempNew, wrld_land)
Исходный растровый кирпич temp
имеет переменную az с именем Date temp@z[["Date"]]
, которая имеет такую структуру
Date[1:2192], format: "2015-01-01" "2015-01-02" "2015-01-03" ...
кирпич tempCropped имеет другой temp@z name 'time' - tempCropped@z[["time"]]
, но с той же структурой Date[1:2192], format: "2015-01-01" "2015-01-02" "2015-01-03" ...
Когда я пытаюсь записать новый файл netcdf с writeRaster(tempCropped, filename = "tempNew.nc",overwrite=TRUE, format="CDF")
, я получаю эту ошибку
Name of variable that the error occurred on: "time"
I.e., you are trying to add a variable with that name to the file, but it ALREADY has a variable with that name!
[1] "----------------------"
[1] "Var: time"
[1] "Ndims: 3"
[1] "Dimids: "
[1] 2 1 0
Error in ncvar_add(nc, vars[[ivar]], verbose = verbose, indefine = TRUE) :
Error in ncvar_add, defining var time
Я запутался в том, как обойти эту ошибку. Я попытался добавить новую переменную z с именем Date и удалить переменную с именем Time. writeRaster завершен, но новый файл n c испорчен.