[R] how to convert the lower triangle of a matrix to a symmetricmatrix

John Fox jfox at mcmaster.ca
Fri Apr 20 14:50:26 CEST 2007

Dear Ranjan,

If the elements are ordered by rows, then the following should do the trick:

    X <- diag(p)
    X[upper.tri(X, diag=TRUE)] <- elements
    X <- X + t(X) - diag(diag(X))

If they are ordered by columns, substitute lower.tri() for upper.tri().

I hope this helps,

John Fox, Professor
Department of Sociology
McMaster University
Hamilton, Ontario
Canada L8S 4M4

> -----Original Message-----
> From: r-help-bounces at stat.math.ethz.ch 
> [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Ranjan Maitra
> Sent: Thursday, April 19, 2007 9:28 PM
> To: r-help at stat.math.ethz.ch
> Subject: [R] how to convert the lower triangle of a matrix to 
> a symmetricmatrix
> Hi,
> I have a vector of p*(p+1)/2 elements, essentially the lower 
> triangle of a symmetric matrix. I was wondering if there is 
> an easy way to make it fill a symmetric matrix. I have to do 
> it several times, hence some efficient approach would be very useful.
> Many thanks and best wishes,
> Ranjan
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide 
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

More information about the R-help mailing list