Ошибка в функции overlay (), расчет с растровыми и числовыми значениями в R - PullRequest
0 голосов
/ 18 сентября 2018

Я хочу сделать некоторые вычисления со списком растров.Поэтому я написал цикл, который до сих пор работал нормально, когда я использовал только растры.Теперь у меня есть расчеты с растрами и числовыми значениями, и это как-то вызывает ошибку в функции наложения.Мой код:

список файлов

NDVI <- list.files(path = 
"C:/Users/Felix/Desktop/Bachelorarbeit/Daten/Datenverarbeitung_R/L8_NDVI",
               pattern = 'NDVI.tif$', full.names=T)

определение функции

fun_PV <- function(x,y,z){((x-y)/(z+y))^2}

Loop

for(i in seq_along(NDVI))
{

  PV <- overlay(x = raster(NDVI[i]),
                y = minValue(raster(NDVI[i])[[i]]),
                z = maxValue(raster(NDVI[i])[[i]]),
                fun = fun_PV)



  sat = substr(NDVI[i], 73, 77)
  path = substr(NDVI[i], 78, 84)
  date = substr(NDVI[i], 85, 92)




  setwd
  ("C:/Users/Felix/Desktop/Bachelorarbeit/Daten/Datenverarbeitung_R/L8_PV")
  writeRaster(PV,filename = paste0(sat, path, date, '_PV', '.tif'))

  removeTmpFiles(h=0.1)
}    

Ошибка, которую я получаю:

Ошибка в (функция (классы, fdef, mtable): не удалось найти унаследованный метод для функции 'overlay' для подписи '' RasterLayer ',' numeric ''

1 Ответ

0 голосов
/ 18 сентября 2018

Когда вы задаете вопрос, всегда старайтесь включать некоторые примеры данных, как я ниже.

Ваши аргументы y и z в overlay не являются растровыми * объектами.У вас есть только один растровый * объект за раз, поэтому вам не нужно overlay.Вы можете сделать что-то вроде:

library(raster)
f <- system.file("external/test.grd", package="raster")
NDVI <- c(f,f,f)
sat <- substr(NDVI, 73, 77)
path <- substr(NDVI, 78, 84)
date <- substr(NDVI, 85, 92)

fun_PV <- function(x,y,z){((x-y)/(z+y))^2}

setwd(".")

for(i in seq_along(NDVI)) {
    r <- raster(NDVI[i])
    PV <- fun_PV(r, minValue(r), maxValue(r))
#   writeRaster(PV, filename=paste0(sat[i], path[i], date[i], '_PV', '.tif'))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...