如何根据单元格值更改聚合栅格时使用的函数?

问题描述 投票:0回答:1

我正在尝试使用根据单元格值更改的专用函数聚合栅格。

这是一个栅格,其中一些值设置为1,一些值设置为2

r <- raster(matrix(rep(3, 100),100,100))
r[sampleRandom(r, 50, cells = TRUE)[, 'cell']] <- 1
r[sampleRandom(r, 10, cells = TRUE)[, 'cell']] <- 2
r[r == 3] <- NA

然后我想要将光栅聚合到原始单元格值为2时值减半的位置

r_agg <- raster::aggregate(r, fact = factor, fun = function(x,...){
  ifelse(x[x == 1], length(na.omit(x))/2^2, (length(na.omit(x))/2^2)/2)
})

但我得到错误:

Error in setValues(out, v) : 
    values must be numeric, integer, logical or factor   

我正在尝试做什么?如果是这样我该如何去做呢?

r r-raster
1个回答
0
投票

您的功能不会聚合。也就是说,总体而言,多个单元的值用于计算较大单元的单个新数。

fun = function(x,...){
  ifelse(x[x == 1], length(na.omit(x))/2^2, (length(na.omit(x))/2^2)/2)
}  

fun(c(1,1,1,1))
#[1] 1 1 1 1

也许你不想聚合?也许你想使用焦点?

library(raster) 
r <- raster(matrix(rep(3, 100),100,100))
r[sampleRandom(r, 50, cells = TRUE)[, 'cell']] <- 1
r[sampleRandom(r, 10, cells = TRUE)[, 'cell']] <- 2
r[r == 3] <- NA

focal(r, w=matrix(1, 3,3), fun)
© www.soinside.com 2019 - 2024. All rights reserved.