Obtendo componentes conectados no R
Eu tenho uma matriz com valores 0 ou 1 e gostaria de obter uma lista de grupos de 1s adjacentes.
Por exemplo, a matriz
mat = rbind(c(1,0,0,0,0),
c(1,0,0,1,0),
c(0,0,1,0,0),
c(0,0,0,0,0),
c(1,1,1,1,1))
> mat
[,1] [,2] [,3] [,4] [,5]
[1,] 1 0 0 0 0
[2,] 1 0 0 1 0
[3,] 0 0 1 0 0
[4,] 0 0 0 0 0
[5,] 1 1 1 1 1
deve retornar os seguintes 4 componentes conectados:
C1 = {(1,1); (2,1)}
C2 = {(2,4)}
C3 = {(3,3)}
C4 = {(5,1); (5,2); (5,3); (5,4); (5,5)}
Alguém tem uma idéia de como fazer isso rápido no R? Minha matriz real é realmente bastante grande, como 2000x2000 (mas espero que o número de componentes conectados seja razoavelmente pequeno, ou seja, 200).