Skip to content
Prev 379998 / 398500 Next

Add transitivity to a matrix?

Suppose I have a square logical matrix M which I'm thinking of as a 
relation between the row/column numbers.

I can make it into a symmetric relation (i.e. M[i,j] being TRUE implies 
M[j,i] is TRUE) by the calculation

M <- M | t(M)

Is there a simple way to ensure transitivity, i.e. M[i,j] & M[j,k] both 
being TRUE implies M[i,k] is TRUE?

The operation should only change FALSE or NA values to TRUE values; TRUE 
values should never be changed.

Duncan Murdoch