On Thu, 19 Apr 2007, Ranjan Maitra wrote:
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.
It depends on what the ordering of elements in your vector is.
Many programs will order those elements (1,1), (2,1), (2,2), (3,1) , ...
In which case this shows how:
k.given.i.j - function(x , y ) ifelse( yx, x*(x-1)/2 + y, y*(y-1)/2 + x )
k.mat - function(p) outer( 1:p, 1:p, k.given.i.j )
k.mat( 3 )
[,1] [,2] [,3]
[1,]124
[2,]235
[3,]456
matrix( rnorm( choose(4,2) )[ k.mat( 3 ) ] , nr = 3 )
[,1][,2][,3]
[1,] -1.2165313 0.28262740 0.62448849
[2,] 0.2826274 -1.19842868 0.05676263
[3,] 0.6244885 0.05676263 -1.80957190
For efficiency, you might save and reuse the result of k.mat().
If the elements are ordered (1,1), (2,1), (3,1), ..., you will need to
write your own version of k.given.i.j()
Many thanks and best wishes,
Ranjan
__
R-help@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.
Charles C. Berry(858) 534-2098
Dept of Family/Preventive Medicine
E mailto:[EMAIL PROTECTED] UC San Diego
http://biostat.ucsd.edu/~cberry/ La Jolla, San Diego 92093-0901
__
R-help@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.