# [R] Help creating a symmetric matrix?

Sarah Goslee sarah.goslee at gmail.com
Sat Dec 24 13:04:52 CET 2011

```Or the slightly shorter:

z<-diag(6)
z[row(z) > col(z)] <- v

which is what lower.tri() does,

and
z <- diag(6)
z[lower.tri(z)] <- v

also works.

Sarah

On Fri, Dec 23, 2011 at 9:31 PM, Rui Barradas <ruipbarradas at sapo.pt> wrote:
>
> Matt Considine wrote
>>
>> Hi,
>> I am trying to work with the output of the MINE analysis routine found at
>>    http://www.exploredata.net
>>
>> Specifically, I am trying to read the results into a matrix (ideally an
>> n x n x 6 matrix, but I'll settle right now for getting one column into
>> a matrix.)
>>
>> The problem I have is not knowing how to take what amounts to being one
>> half of a symmetric matrix - excluding the diagonal - and getting it
>> into a matrix.  I have tried using "lower.tri" as found here
>>    https://stat.ethz.ch/pipermail/r-help/2008-September/174516.html
>> but it appears to only partially fill in the matrix.  My code and an
>> example of the output is below.  Can anyone point me to an example that
>> shows how to create a matrix with this sort of input?
>>
>> Matt
>>
>> #v<-newx[,3]
>> #or, for the sake of this example
>> v<-c(0.33740, 0.26657, 0.23388, 0.23122, 0.21476, 0.20829, 0.20486,
>> 0.19439, 0.19237,
>> 0.18633, 0.17298, 0.17174, 0.16822, 0.16480, 0.15027)
>> z<-diag(6)
>> ind <- lower.tri(z)
>> z[ind] <- t(v)[ind]
>>
>> z
>>          [,1]    [,2] [,3] [,4] [,5] [,6]
>> [1,] 1.00000 0.00000    0    0    0    0
>> [2,] 0.26657 1.00000    0    0    0    0
>> [3,] 0.23388 0.19237    1    0    0    0
>> [4,] 0.23122 0.18633   NA    1    0    0
>> [5,] 0.21476 0.17298   NA   NA    1    0
>> [6,] 0.20829 0.17174   NA   NA   NA    1
>>
>>
> Hello,
>
> Aren't you complicating?
>
> In the last line of your code, why use 'v[ind]' if 'ind' indexes the matrix,
> not the vector?
>
> z<-diag(6)
> ind <- lower.tri(z)
> z[ind] <- v                        #This works
> z
>