我知道有一种 R 方法可以让程序员将邻居列表转换为矩阵。我正在尝试做相反的过程;无论如何,我可以将包含点的 x 和 y 坐标的矩阵转换为邻居列表吗?
谢谢你
PS:我尝试了以下方法:
require(spdep)
mat2listw(myMatrix)$neighbours
但这会导致问题,因为 myMatrix 必须是方阵……在我的情况下,我的矩阵是 11*2,它不是方阵。
我知道有一种 R 方法可以让程序员将邻居列表转换为矩阵。我正在尝试做相反的过程;无论如何,我可以将包含点的 x 和 y 坐标的矩阵转换为邻居列表吗?
谢谢你
PS:我尝试了以下方法:
require(spdep)
mat2listw(myMatrix)$neighbours
但这会导致问题,因为 myMatrix 必须是方阵……在我的情况下,我的矩阵是 11*2,它不是方阵。
您可以尝试以下方法。
# need indices. Use Names or numeric index
rr <- if(is.null(rownames(myMatrix))) seq(nrow(myMatrix)) else rownames(myMatrix)
cc <- if(is.null(colnames(myMatrix))) seq(ncol(myMatrix)) else colnames(myMatrix)
inds <- as.matrix( expand.grid(X=rr, Y=cc) )
## as a data.frame
data.frame(inds, Dist=myMatrix[inds])
## as a list
ret <- apply(inds, 1, function(i) list(c(i, Dist=myMatrix[rbind(i)])))
# possibly unlist if needed
unlist(ret, recursive=FALSE)
set.seed(1)
myMatrix <- matrix(sample(8, 22, TRUE), ncol=2, dimnames=list(LETTERS[1:11], letters[1:2]))
myMatrix