矩阵或数组中项目的排序是“列优先”,因此如果您想要在列和行中都出现的序列,则需要测试原始矩阵及其转置。
> which(diff(M)==0)
[1] 5 17 48 61 68 75
> which(diff(t(M))==0)
[1] 5 7 8 35 40 64 90
> M
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 4 7 6 5 4 4 5 5 5 10
[2,] 3 9 8 10 9 2 7 4 6 3
[3,] 6 3 6 4 8 3 10 6 10 4
[4,] 1 4 8 10 9 3 7 10 10 5
[5,] 5 8 5 7 7 6 5 7 1 10
[6,] 5 7 2 9 5 3 4 7 6 4
[7,] 9 3 8 2 8 2 5 9 8 6
[8,] 4 4 9 7 9 3 5 8 3 2
[9,] 6 4 6 10 3 6 3 9 4 1
[10,] 2 7 3 2 4 3 7 1 8 8
第一个结果中的“5”指的是位置 [5:6,1] 中的 5,而在转置 M 上完成的 5 指的是位置 [1, 5:6] 中的 4。您询问的相邻 7 由第二个结果中的 35 标识。
你可能想看看这两个矩阵。如果您希望将结果与原始结果“对齐”,则可以在第二个末尾添加 FALSE 列,并在第一个下方添加 FALSE 行:
t(diff(t(M))==0)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] FALSE FALSE FALSE FALSE TRUE FALSE TRUE TRUE FALSE
[2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[3,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
[5,] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
[6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[7,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[8,] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[10,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
> diff(M)==0
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[3,] FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE
[4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[5,] TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
[6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[7,] FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
[8,] FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE