Заменить значение в растре значением из другого растра - PullRequest
0 голосов
/ 27 декабря 2018

В следующем примере я пытаюсь заменить значение 10 в растре r на соответствующее значение пикселя из растра r2:

library(raster)    

r <- raster(nrows=25, ncols=25, vals=round(rnorm(625, 3), 0)) #land-use/cover raster
r[ r > 2 ] <- NA
r[ r < 1 ] <- 10
plot(r)

r2 <- raster(nrows=25, ncols=25, vals=round(rnorm(625, 3), 0)) #land-use/cover raster
plot(r2)

Я надеялся, что следующий код будет работать:

r3 <- overlay(r, r2, fun = function(x, y) { x[ x == 10 ] <- y ; return(x) })

... но возвращается ошибка:

Error in (function (x, fun, filename = "", recycle = TRUE, forcefun = FALSE,  : 
  cannot use this formula, probably because it is not vectorized

Я уверен, что часть проблемы связана с "<- y" в функции наложения.Я попытался использовать «<- y [x == 10]» вместо этого, но все еще сталкиваюсь с той же проблемой ... Есть идеи?Заранее спасибо. </p>

Ответы [ 2 ]

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

Если вы используете случайные значения для вашего примера, я бы посоветовал также использовать случайное начальное число, чтобы оно было воспроизводимым и сопоставимым.

Поскольку ваши два растра имеют одинаковые измерения, вы можете просто использовать логическое индексирование.

Вот небольшой пример:

library(raster)

set.seed(42)

r <-setValues(raster(ncol=10,nrow=10),round(runif(100,1,10)))
r2 <-setValues(raster(ncol=10,nrow=10),round(runif(100,1,10)))

# create logical index (for later comparison)
ix <- r == 10

# returns FALSE, so r2 doesn't have any 10 where r has one
any(r[ix] == r2[ix])

r[ix] <- r2[ix]

# prints TRUE, so all values have been correctly replaced
all(r[ix] == r2[ix])

Вы можете сделать замену также в одном простом вкладыше:

[r == 10] <- r2[r == 10]
0 голосов
/ 27 декабря 2018

Вам необходимо заменить [x = 10] на 10. Попробуйте использовать приведенный ниже код.r3 <- оверлей (r, r2, fun = функция (x, y) {x [10] <- y; return (x)}) </p>

или

r3 <- оверлей (r, r2, fun = function (x, y) {x [10] <- y [10]; return (x)}) </p>

...