如何根据像元值汇总栅格时更改使用的功能?

时间:2019-04-25 08:11:02

标签: r r-raster

我正在尝试使用一种特殊的功能来聚合栅格,该功能会根据像元的值而变化。

这是一个栅格,其中一些值设置为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   

我想做的是可能的吗?如果是这样,我该怎么做呢?

1 个答案:

答案 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)