В вашем calc
вы передаете x[1]
на yFromCell
.Но x[1]
- это значение растровой ячейки, тогда как вам нужно передать номер ячейки в yFromCell
.Я могу проиллюстрировать это на минимальном примере:
Сначала давайте создадим небольшой фиктивный растр
library(raster)
set.seed(0)
clim = raster(matrix(sample(c(1:10,NA), 100, T), 10, 10))
Теперь давайте попробуем получить его широты, используя аналогию с тем, что вы имели в примере
lat = calc(clim, function(x) yFromCell(clim, x))
plot(lat)
Как видите, это совсем не так - мы получили совершенно неправильные значения широты, потому что мы передали значение ячейки, а не номер ячейки.
Итак, давайте создадим растровый слой с правильными широтами
lat = clim
lat[] = yFromCell(clim, 1:ncell(clim))
plot(lat)
Это намного лучше.Теперь мы можем добавить это как слой к нашим климатическим данным, чтобы calc
мог обращаться к этим значениям по ячейкам.
climrast = stack(list(clim, lat))
koppen = calc(climrast, function(x) x[1]*x[2])