Как применить растровый стек для каждого слоя? - PullRequest
0 голосов
/ 08 декабря 2018

Я хочу применить функцию к стеку каждого слоя и вернуть стек.

library(raster)
r1 <- raster(vals=1:20,nrow=4,ncols=5)
r2 <- raster(vals=2:21,nrow=4,ncols=5)
r3 <- raster(vals=3:22,nrow=4,ncols=5)
stk <- stack(r1,r2,r3)
func <- function(x){
  calc(x,function(y){
    ifelse(y>10,0,y)
  })
}

Я применяю func на каждый слой, используя lapply

lapply(stk,func)
Error in (function (classes, fdef, mtable)  : 
unable to find an inherited method for function ‘calc’ for signature ‘"integer", "function"’ 

Кажется lapply срез stk как stk[1] stk[2] ..., но фактический слой - stk[[1]], stk[[2]] ....

И используйте stackApply:

stackApply(stk,indices=1:3,fun=func)
Error in FUN(newX[, i], ...) : unused argument (na.rm = na.rm)

1 Ответ

0 голосов
/ 08 декабря 2018

Похоже, вы можете использовать только calc:

stack(calc(stk, function(y) ifelse(y > 10, 0, y)))
# class       : RasterStack 
# dimensions  : 4, 5, 20, 3  (nrow, ncol, ncell, nlayers)
# resolution  : 72, 45  (x, y)
# extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
# coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
# names       : layer.1, layer.2, layer.3 
# min values  :       0,       0,       0 
# max values  :      10,      10,      10 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...