[R] Reading in data in a triangle

Liaw, Andy andy_liaw at merck.com
Mon Oct 8 19:58:28 CEST 2001


> Dear Stuart,
> 
> At 03:16 PM 05/10/2001 -0500, s-luppescu at uchicago.edu wrote:
> >I have plain-text data in lower triangular form that I want 
> to read in. Does
> >anyone know of an easy way to do this?
> 
> It's not altogether clear to me what you want to do, but I'll 
> take a stab 
> at it.
> 
> Simply to read the data into a vector is no trick: scan will do that. 
> Assuming that you want to read the data into a 
> lower-triangular matrix, you 
> might try something like the following, starting with the 
> file LT.txt, 
> which contains:
> 
>      1
>      2 3
>      4 5 6
>      7 8 9 10
> 
> Then, constructing an upper-triangular matrix and transposing it,
> 
>      > U <- matrix(0, 4, 4)
>      > U[outer(1:4, 1:4, '<=')] <- scan('c:/temp/LT.txt')
>      Read 10 items
>      > t(U)
>          [,1] [,2] [,3] [,4]
>      [1,]    1    0    0    0
>      [2,]    2    3    0    0
>      [3,]    4    5    6    0
>      [4,]    7    8    9   10
> 
> Is that what you need?
> 
>   John
> 

John's solution requires the dimension of the matrix be known beforehand.
Here's a slightly more general way, using connections.  Maybe others can
improve on it?

lucon <- file("LU.txt", open="rt")
x <- readLines(lucon)
close(lucon)
n <- length(x)
U <- matrix(0, n, n)
U[upper.tri(U, diag=TRUE)] <- as.numeric(unlist(strsplit(x, " ")))
U <- t(U)


Andy

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list