[R] Construct a lower-triangular matrix

Berend Hasselman bhh at xs4all.nl
Sat Oct 10 10:49:55 CEST 2015


> On 10 Oct 2015, at 10:00, David Winsemius <dwinsemius at comcast.net> wrote:
> 
> 
> On Oct 9, 2015, at 10:57 PM, Steven Yen wrote:
> 
>> Dear
>> How do you construct a lower triangular matrix from a vector.
>> 
>> I want to make vector
>> 
>> a <- 1:10
>> 
>> into a triangular matrix
>> 
>> 1 0 0  0
>> 2 3 0  0
>> 4 5 6  0
>> 7 8 9 10
>> 
> 
> I'm not sure this method with logical indexing will be the most elegant:
> 
> ?lower.tri
> ?col
> 
>> b=matrix(0, sqrt(10)+1,sqrt(10)+1)
> 
>> b[lower.tri(b)| row(b)==col(b)] <- 1:10
>> b
>     [,1] [,2] [,3] [,4]
> [1,]    1    0    0    0
> [2,]    2    5    0    0
> [3,]    3    6    8    0
> [4,]    4    7    9   10
> 

That doesn’t seem to be what the OP wanted.

This should do it.

a <- 1:10
C <- matrix(0, sqrt(length(a))+1,sqrt(length(a))+1)
i.upr <- which(upper.tri(C, diag = TRUE), arr.ind=TRUE)
C[i.upr] <- a
t(C)

resulting in

     [,1] [,2] [,3] [,4]
[1,]    1    0    0    0
[2,]    2    3    0    0
[3,]    4    5    6    0
[4,]    7    8    9   10

I found this here: http://stackoverflow.com/questions/24472060/indexing-upper-or-lower-triangle-in-matrix-with-diagonal

Berend



More information about the R-help mailing list