给定一个矩阵,我想找到每个元素的邻居之和(所以结果是一个矩阵).如果存在(不考虑对角线元素),则邻居是给定元素上方,下方和旁边的值.
例:
> z = matrix(1:9, 3, 3, byrow=T)
> z
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
Run Code Online (Sandbox Code Playgroud)
预期的结果是:
> result
[,1] [,2] [,3]
[1,] 6 9 8
[2,] 13 20 17
[3,] 12 21 14
Run Code Online (Sandbox Code Playgroud)
在不使用循环的情况下,我可以在R中执行此操作的最简单方法是什么?
一种方法是在每一侧与邻居制作矩阵并将它们加在一起.
rbind(z[-1,],0) + rbind(0,z[-nrow(z),]) + cbind(z[,-1],0) + cbind(0,z[,-ncol(z)])
## [,1] [,2] [,3]
## [1,] 6 9 8
## [2,] 13 20 17
## [3,] 12 21 14
Run Code Online (Sandbox Code Playgroud)