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).

questionAnswers(1)

yourAnswerToTheQuestion