Обрезка растров Netcdf в R

Я все еще работаю в том же проекте, где спросил этот вопрос.

И я все в порядке, но время моей обработки слишком велико, для каждого файла NetCDF, который я его читаю, получаю стек из нескольких временных срезов, а затем обрезаю каждый из этих временных срезов внутри r, используя такой код, как один ниже:

library(raster)
library(ncdf4)
library(ncdf4.helpers)
library(rworldxtra)
data("countriesHigh")

У меня есть файлы NETCdf для всего мира, но я использую только Южную Америку, для этого я использую countiresHigh из пакета rworldxtra для его подмножества:

NONA <- countriesHigh[!is.na(countriesHigh@data$GEO3),]
## get shapefile of South America
SA <- NONA[NONA@data$GEO3 == "South America",]

Затем, используя следующий код, я обрезаю каждый слой, который мне нужен.

##Open conection to the layer
nc <- nc_open("C:/Users/mean_temperature-15000BP-10000BP.nc")

Теперь я начинаю цикл

for(i in 1:10){
  message(paste("reading layer", i))
  # Read the stack for year i
  r <- stack("C:/Users/mean_temperaturemean_temperature-15000BP-10000BP.nc", varname = age[i])  
  #Change the extent to the correct one
  extent(r) <- c(-180,180,-90,90)
  #Crop it to South America
  r <- crop(r, SA)
  gc()
}

Проблема 1. Могу ли я обрезать netcdf один раз перед чтением стеков, чтобы ускорить этот процесс?

Я посмотрел здесь, здесь и здесь, и не нашел ответа.

Проблема 2: если я могу обрезать его, как мне определить степень, учитывая, что файл NETCDF содержит только положительную широту и положительную долготу

как указано в этом вопросе, определенный экстент карты не самый обычный, но я основываю свою обрезку на экстенте шейп-файла, который имеет более типичный c(-180,180,-90,90) экстент


person Derek Corcoran    schedule 27.08.2018    source источник
comment
Может быть, здесь может оказаться полезным пакет stars? Этот блог описывает, как читать NetCDF.   -  person SeGa    schedule 27.08.2018
comment
Спасибо @SeGa Я проверю, вроде хороший пакет   -  person Derek Corcoran    schedule 27.08.2018