我有一个栅格,我想从中创建一个邻近矩阵,其中相邻的(共享公共边界)像元的值为1,不共享公共边界的像元的值为0。
我试图通过将栅格中的值导出到数据帧然后创建接近矩阵来实现此目的,但是当我将该方法应用于实际数据时,这在计算机上占用了太多内存,这比这个可重复的例子。
#create matrix
xy <- matrix(rnorm(400),5,5)
#visualize matrix
image(xy)
# Turn the matrix into a raster
rast <- raster(xy)
#export to dataframe
rast.to.points <- rasterToPoints(rast)
head(rast.to.points)
#put number of rows the dataframe has into an object
n.rast <- nrow(rast.to.points)
#Build a neighborhood structure based on 4 nearest neighbors, i.e. cardinal
directions.
distance.rast <- as.matrix(dist(rast.to.points[,c("x","y")]))
# Proximity matrix
W.rast <- matrix(0, nrow = n.rast, ncol = n.rast)
W.rast[distance.rast==1] <- 1
image(W.rast)
有一种方法可以直接使用栅格数据包中的focus()或neighbor()来创建新栅格,而不是直接创建邻近矩阵,共享共同边界的像元将接收到1,而未接收到像元0?然后,我可以将所得的接近度栅格转换为接近度矩阵。或任何其他使用更少的计算机内存来创建此接近度矩阵的方法,将不胜感激。