Сохранить / сохранить через растровую петлю в R - PullRequest
0 голосов
/ 30 января 2019

У меня большой растровый стек, для которого я рассчитываю максимум для каждых двух слоев.Следующий цикл отлично работает, кроме дат.Как я могу сохранить даты в моем новом стеке?(Я предполагаю, что мне нужен getZ, но я не знаю, как его реализовать.)

Спасибо

Пример кода

m_date<-as.data.frame(as.Date(c('2009-05-01','2010-03-25','2007-06-14','2008-12-18','2016-05-20')))

m_r <- raster(matrix(1:60,3,4))
m_stack <- stack(m_r,m_r,m_r,m_r,m_r)
m_stack <- addLayer(m_stack,m_date)

new_stack<-m_stack[[1]]
new_stackk@z$Date<-m_stack@z$Date[[1]]


for (i in 1:5) {
    # calculate max every two layers (works fine)
    new_stack[[k]] <- calc(m_stack[[((i-1)*2 + 1):((i-1)*2 + 2)]], fun = max, na.rm = T)
    # store the date for each one of the max layers (does not work)
    new_stack@z$Date[[i]] <-m_stack@z$Date[[i]]

}

1 Ответ

0 голосов
/ 30 января 2019

Вот код, который запускается.Предполагается, что:

  1. Вы хотите сравнить соседние даты (слои отсортированы по дате)
library(raster)

m_date <- data.frame(date = 
  as.Date(c('2009-05-01','2010-03-25','2007-06-14','2008-12-18')))

m_r       <- lapply(m_date$date, function(x) raster(matrix(rnorm(60),3,4)))
m_stack   <- stack(m_r)
m_stack@z <- list(m_date = m_date[,1])

# sort by date
m_stack   <- m_stack[[order(m_stack@z$m_date)]]

new_stack <- m_stack[[-1]]

for (i in 1:(nlayers(new_stack))) {
  new_stack[[i]] <- calc(m_stack[[i:(i+1)]], fun = max)

  new_stack@z$m_date[[i]] <- m_stack@z$m_date[i:(i+1)][
    which.max(c(
      cellStats(m_stack[[i]], stat = max), 
      cellStats(m_stack[[i+1]], stat = max)))]
}

new stack
dimensions  : 3, 4, 12, 3  (nrow, ncol, ncell, nlayers)
resolution  : 0.25, 0.3333333  (x, y)
extent      : 0, 1, 0, 1  (xmin, xmax, ymin, ymax)
coord. ref. : NA 
names       :     layer.1,     layer.2,     layer.3 
min values  : -0.03990727, -0.46295595, -0.39121706 
max values  :    2.261900,    2.261900,    1.647811 
m_date      : 2008-12-18, 2008-12-18, 2009-05-01 

...