Извлечение значений из одного из нескольких растров PRISM в R - PullRequest
0 голосов
/ 04 августа 2020

У меня есть набор из 100 шир / долгих и 100 (иногда повторяющихся) лет. Для каждой широты и долготы я хотел бы найти годовую температуру (используя данные PRISM) в соответствующем году.

Я создал циклы и функции для итерации процесса, но они продолжают получать застрял. Я знаю, что должен быть более простой способ сделать это (желательно избегать a for l oop!).

В качестве примера, вот 4 широты / долготы и года, и моя (смехотворная) попытка l oop над ними.

library(prism)
library(raster)

locs <- data.frame( lat = c(46.30101, 42.65503, 44.38075, 43.90637), lon = c(-91.764380  -86.201983, -88.951511, -91.081340, -87.896017))

years <- c(1989,1954,2010,1954)

coordinates(locs) <- c('lat', 'lon')

temps <- NULL

for(i in 1:length(years)) {
  tryCatch({dir.create(paste0(getwd(),"/",years[i]))}, error=function(e){}) # skip making a new directory for any years that already exist
  options(prism.path = paste0(getwd(),"/",years[i]))
  get_prism_annual(type = "tmean", years = as.numeric(years[i])) # Get the data
  climate_data <- prism_stack(ls_prism_data()) # Stack it
  climate_crs <- climate_data@crs@projargs # Get the projection
  proj4string(occ.latlong) <- CRS(climate_crs) # Project the climate data's CRS onto the coordinates
  
  temps <- rbind(temps, extract(climate_data, locs[i,]))
}

Это l oop отбрасывает НА для повторяющихся лет (1954 г. выше). Есть ли способ попроще?!

1 Ответ

1 голос
/ 04 августа 2020

Поскольку вы загружаете много данных, я бы разделил l oop на две части и сначала сделал бы загрузки. Таким образом также будет легче отлаживать ваш код. Я также упростил код, возможно. 1009 * Объедините результаты

x <- do.call(cbind, temps)

Обратите внимание, что извлечение одних и тех же значений (в одни и те же годы) несколько раз может быть довольно неэффективным, чем повторное использование извлеченных значений.

...