用另一个栅格中的值替换栅格中的值

时间:2018-12-26 23:50:30

标签: r overlay raster

在下面的示例中,我尝试将栅格r中的值10替换为栅格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]”代替,但仍然遇到相同的问题...有什么想法吗?预先感谢。

2 个答案:

答案 0 :(得分:0)

如果您在示例中使用随机值,我建议您也使用随机种子,以便其具有可重复性和可比性。

由于两个栅格的尺寸相同,因此您可以使用逻辑索引。

这是一个小例子:

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]

答案 1 :(得分:-2)

您需要将[x = 10]替换为10。 尝试使用下面的代码。 r3 <-overlay(r,r2,fun = function(x,y){x [10] <-y; return(x)})

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