【问题标题】:Error in overlay() function, calculation with raster and numeric values in Roverlay() 函数中的错误,用 R 中的栅格和数值计算
【发布时间】:2018-09-18 17:41:30
【问题描述】:

我想对栅格列表进行一些计算。因此我写了一个循环,到目前为止,当我只使用栅格时它工作得很好。现在我使用栅格和数值变量进行计算,不知何故这会导致叠加函数出现错误。 我的代码是:

列出文件

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}

循环

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)中的错误: 找不到签名“RasterLayer”、“numeric”的函数“overlay”的继承方法

【问题讨论】:

    标签: r loops overlay raster


    【解决方案1】:

    当您提出问题时,请始终尝试包含一些示例数据,如下所示。

    overlay 中的参数 yz 不是 Raster* 对象。您一次只有一个 Raster* 对象,因此您不需要 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'))
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多