Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如果单元包含点,则将光栅单元值更改为NA_R_Raster_Sp - Fatal编程技术网

R 如果单元包含点,则将光栅单元值更改为NA

R 如果单元包含点,则将光栅单元值更改为NA,r,raster,sp,R,Raster,Sp,我有许多光栅层包含在一个堆栈中,还有一个空间点对象包含点坐标。如果单元包含点,我尝试将光栅层的值更改为NA 我在下面提供了一个可复制的示例。然而,在上下文中,我的真实数据由10层“栖息地”(海拔、树冠覆盖等)组成,它们都包含在一个堆栈中。光栅覆盖的区域约为34 x 26 km。此外,我还有大约10000个来自动物的GPS定位 因此,对于可复制的示例 library(raster) library(sp) 制作三个光栅,并将它们组合成一个堆栈 set.seed(123) r1 <- ras

我有许多光栅层包含在一个
堆栈中
,还有一个
空间点
对象包含点坐标。如果单元包含点,我尝试将光栅层的值更改为NA

我在下面提供了一个可复制的示例。然而,在上下文中,我的真实数据由10层“栖息地”(海拔、树冠覆盖等)组成,它们都包含在一个堆栈中。
光栅
覆盖的区域约为34 x 26 km。此外,我还有大约10000个来自动物的GPS定位

因此,对于可复制的示例

library(raster)
library(sp)
制作三个
光栅
,并将它们组合成一个
堆栈

set.seed(123)
r1 <- raster(nrows=10, ncols=10)
r1 <- setValues(r1, sample(c(1:50), 100, replace = T))

r2 <- raster(nrows=10, ncols=10)
r2 <- setValues(r2, sample(c(40:50), 100, replace = T))

r3 <- raster(nrows=10, ncols=10)
r3 <- setValues(r3, sample(c(50:55), 100, replace = T))

Stack <- stack(r1, r2, r3)
nlayers(Stack)
绘制其中一个光栅和点

plot(Stack[[2]])
plot(Pts, add = T)

现在,是否可以将至少包含一个点的每个单元格的值更改为NA?在
堆栈上执行此操作将非常好,我将使用
extract()
,可以要求它返回每个点所在的光栅单元的单元号:

ii <- extract(Stack, Pts, cellnumbers=TRUE)[,"cells"]
Stack[ii] <- NA

## Check any one of the layers to see that this worked:
plot(Stack[[2]])
plot(Pts, add=TRUE)

酷。非常有用。您在
堆栈中索引层
[[1]]
有什么原因吗?通过测试,您似乎可以一次对整个堆栈执行该操作。e、 g.
ii@B.Davis没有什么好理由,事实上也不需要调用
unique()
。我对这篇文章进行了相应的简化。
ii <- extract(Stack, Pts, cellnumbers=TRUE)[,"cells"]
Stack[ii] <- NA

## Check any one of the layers to see that this worked:
plot(Stack[[2]])
plot(Pts, add=TRUE)
ii <- !is.na(rasterize(Pts, Stack))
Stack[ii] <- NA