Fill lower matrix with vector by row, not column

Posted by mhermans on Stack Overflow See other posts from Stack Overflow or by mhermans
Published on 2011-03-15T23:48:38Z Indexed on 2011/03/16 0:10 UTC
Read the original article Hit count: 143

Filed under:
|
|

I am trying to read in a variance-covariance matrix written out by LISREL in the following format in a plain text, whitespace separated file:

 0.23675E+01  0.86752E+00  0.28675E+01 -0.36190E+00 -0.36190E+00  0.25381E+01
-0.32571E+00 -0.32571E+00  0.84425E+00  0.25598E+01 -0.37680E+00 -0.37680E+00
 0.53136E+00  0.47822E+00  0.21120E+01 -0.37680E+00 -0.37680E+00  0.53136E+00
 0.47822E+00  0.91200E+00  0.21120E+01

This is actually a lower diagonal matrix (including diagonal):

 0.23675E+01  
 0.86752E+00  0.28675E+01 
-0.36190E+00 -0.36190E+00  0.25381E+01
-0.32571E+00 -0.32571E+00  0.84425E+00  0.25598E+01 
-0.37680E+00 -0.37680E+00  0.53136E+00  0.47822E+00  0.21120E+01 
-0.37680E+00 -0.37680E+00  0.53136E+00  0.47822E+00  0.91200E+00  0.21120E+01

I can read in the values correctly with scan() or read.table(fill=T).

I am however not able to correctly store the read-in vector in a matrix. The following code

S <- diag(6)
S[lower.tri(S,diag=T)] <- d

fills the lower matrix by column, while it should fill it by row.

Using matrix() does allow for the option byrow=TRUE, but this will fill in the whole matrix, not just the lower half (with diagonal).

Is it possible to have both: only fill the lower matrix (with diagonal) and do it by row?

(separate issue I'm having: LISREL uses 'D+01' while R only recognises 'E+01' for scientific notation. Can you change this in R to accept also 'D'?)

© Stack Overflow or respective owner

Related posts about r

    Related posts about matrix