我正在尝试使用一种特殊的功能来聚合栅格,该功能会根据像元的值而变化。
这是一个栅格,其中一些值设置为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
我想做的是可能的吗?如果是这样,我该怎么做呢?
答案 0 :(得分: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)