我正在尝试使用根据单元格值更改的专用函数聚合栅格。
这是一个栅格,其中一些值设置为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
我正在尝试做什么?如果是这样我该如何去做呢?
您的功能不会聚合。也就是说,总体而言,多个单元的值用于计算较大单元的单个新数。
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)