[R] Need help on upper.tri()

William Dunlap wdunlap at tibco.com
Tue Aug 3 18:27:29 CEST 2010


> -----Original Message-----
> From: r-help-bounces at r-project.org 
> [mailto:r-help-bounces at r-project.org] On Behalf Of Nikhil Kaza
> Sent: Tuesday, August 03, 2010 8:56 AM
> To: Ron Michael
> Cc: r-help at r-project.org
> Subject: Re: [R] Need help on upper.tri()
> 
> 
> try using Matrix package instead
> 
> mat <- Matrix(rnorm(25),5,5)
> forceSymmetric(mat)
> 
> The reason your method does not work is because matrix is 
> effectively  
> a vector and the indices increase along rows within a column.

To copy the transpose of the upper triangle to the
lower triangle using only base R functions try
   mat[lower.tri(mat)] <- t(mat)[lower.tri(mat)]

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com  

> 
> Nikhil
> 
> On Aug 3, 2010, at 7:36 AM, Ron Michael wrote:
> 
> > HI, I am really messing up to make a symmetrical matrix using  
> > upper.tri() & lower.tri() function. Here is my code:
> >
> >> set.seed(1)
> >> mat = matrix(rnorm(25), 5, 5)
> >> mat
> >            [,1]       [,2]       [,3]        [,4]        [,5]
> > [1,] -0.6264538 -0.8204684  1.5117812 -0.04493361  0.91897737
> > [2,]  0.1836433  0.4874291  0.3898432 -0.01619026  0.78213630
> > [3,] -0.8356286  0.7383247 -0.6212406  0.94383621  0.07456498
> > [4,]  1.5952808  0.5757814 -2.2146999  0.82122120 -1.98935170
> > [5,]  0.3295078 -0.3053884  1.1249309  0.59390132  0.61982575
> >> mat[lower.tri(mat)] = mat[upper.tri(mat)]
> >> mat
> >             [,1]        [,2]        [,3]        [,4]        [,5]
> > [1,] -0.62645381 -0.82046838  1.51178117 -0.04493361  0.91897737
> > [2,] -0.82046838  0.48742905  0.38984324 -0.01619026  0.78213630
> > [3,]  1.51178117 -0.01619026 -0.62124058  0.94383621  0.07456498
> > [4,]  0.38984324  0.94383621  0.78213630  0.82122120 -1.98935170
> > [5,] -0.04493361  0.91897737  0.07456498 -1.98935170  0.61982575
> >
> >
> > Which is not coming as symmetrical function. Can anyone 
> point me on  
> > the correct way of using upper, lower.try() function to get a  
> > symmetrical matrix?
> >
> > Thanks,
> >
> >
> > 	[[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-help at r-project.org 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.
> 
> ______________________________________________
> R-help at r-project.org 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