[R] Create matrix with subset from unlist

David Winsemius dwinsemius at comcast.net
Fri Jan 29 16:17:22 CET 2010


On Jan 29, 2010, at 9:45 AM, Dennis Murphy wrote:

> Hi:
>
> The problem, I'm guessing, is that you need to assign each of the  
> matrices
> to an object.
> There's undoubtedly a slick apply family solution for this (which I  
> want to
> see, BTW!),

I don't have a method that would assign names but you could populate  
an array of sufficient size and dimension. I populated a three-element  
list with his data:

 > dput(x)
list(structure(list(V1 = c(-27.3, 29), V2 = c(14.4, -38.1)), .Names =  
c("V1",
"V2"), class = "data.frame", row.names = c("1", "2")), structure(list(
     V1 = c(14.4, -38.1), V2 = c(29, -3.4)), .Names = c("V1",
"V2"), class = "data.frame", row.names = c("1", "2")), structure(list(
     V1 = c(29, -3.4), V2 = c(-38.1, 55.1)), .Names = c("V1",
"V2"), class = "data.frame", row.names = c("1", "2")))

 > xx <- array( , dim=c(2,2,3))

 > xx[,,1:3] <- sapply(x, data.matrix)
 > xx
, , 1

       [,1]  [,2]
[1,] -27.3  14.4
[2,]  29.0 -38.1

, , 2

       [,1] [,2]
[1,]  14.4 29.0
[2,] -38.1 -3.4

, , 3

      [,1]  [,2]
[1,] 29.0 -38.1
[2,] -3.4  55.1

Without the more complex structure ready to accept the 2x2 arrays I  
got this:

 > sapply(x, data.matrix)
       [,1]  [,2]  [,3]
[1,] -27.3  14.4  29.0
[2,]  29.0 -38.1  -3.4
[3,]  14.4  29.0 -38.1
[4,] -38.1  -3.4  55.1

-- 
David.

> but here's the brute force method using a loop:
>
> nms <- paste('x', 1:32, sep = "")
> for(i in seq_along(nms)) assign(nms[i], x[[i]])
>
> HTH,
> Dennis
>
> On Fri, Jan 29, 2010 at 6:30 AM, Muhammad Rahiz <
> muhammad.rahiz at ouce.ox.ac.uk> wrote:
>
>> Hello all,
>>
>> I'm trying to create a 2x2 matrix, 32 times after unlist() so that  
>> I can
>> convert the list to matrix. I've looked through the R archive but  
>> couldn't
>> find the answer. There is what I've done.
>>
>>
>>> f <- system("ls *.txt", intern=TRUE)
>>> x <- lapply(f, read.table)
>>> x
>> [[1]]
>>   V1    V2
>> 1 -27.3  14.4
>> 2  29.0 -38.1
>>
>> [[2]]
>>   V1   V2
>> 1  14.4 29.0
>> 2 -38.1 -3.4
>>
>> [[3]]
>>  V1    V2
>> 1 29.0 -38.1
>> 2 -3.4  55.1
>>
>> [[4]]
>>   V1   V2
>> 1 -38.1 -3.4
>> 2  55.1 -1.0
>>
>> [[5]]
>>  V1   V2
>> 1 -3.4 55.1
>> 2 -1.0 21.9
>>
>> [[6]]
>>  V1    V2
>> 1 55.1  -1.0
>> 2 21.9 -10.9
>>
>> ...
>>
>>> xx <- unlist(x)
>> V11   V12   V21   V22   V11   V12   V21   V22   V11   V12   V21   V22
>> -27.3  29.0  14.4 -38.1  14.4 -38.1  29.0  -3.4  29.0  -3.4 -38.1   
>> 55.1
>> V11   V12   V21   V22   V11   V12   V21   V22   V11   V12   V21   V22
>> -38.1  55.1  -3.4  -1.0  -3.4  -1.0  55.1  21.9  55.1  21.9  -1.0  
>> -10.9
>> V11   V12   V21   V22   V11   V12   V21   V22   V11   V12   V21   V22
>> -1.0 -10.9  21.9  -7.8  21.9  -7.8 -10.9 -48.2 -10.9 -48.2  -7.8  
>> -44.9
>> V11   V12   V21   V22   V11   V12   V21   V22   V11   V12   V21   V22
>> -7.8 -44.9 -48.2 -43.8 -48.2 -43.8 -44.9 -10.3 -44.9 -10.3 -43.8   
>> 44.2
>> V11   V12   V21   V22   V11   V12   V21   V22   V11   V12   V21   V22
>> -43.8  44.2 -10.3  -0.5 -10.3  -0.5  44.2  96.7  44.2  96.7  -0.5  
>> -32.0
>> V11   V12   V21   V22   V11   V12   V21   V22   V11   V12   V21   V22
>> -0.5 -32.0  96.7  -0.2  96.7  -0.2 -32.0 -38.6 -32.0 -38.6  -0.2   
>> 73.6
>> V11   V12   V21   V22   V11   V12   V21   V22   V11   V12   V21   V22
>> -0.2  73.6 -38.6 -17.5 -38.6 -17.5  73.6 -57.8  73.6 -57.8 -17.5   
>> 10.7
>> V11   V12   V21   V22   V11   V12   V21   V22   V11   V12   V21   V22
>> -17.5  10.7 -57.8 -33.4 -57.8 -33.4  10.7  46.1  10.7  46.1 -33.4   
>> 26.7
>> V11   V12   V21   V22   V11   V12   V21   V22   V11   V12   V21   V22
>> -33.4  26.7  46.1 -37.3  46.1 -37.3  26.7   1.2  26.7   1.2 -37.3   
>> 36.3
>> V11   V12   V21   V22   V11   V12   V21   V22   V11   V12   V21   V22
>> -37.3  36.3   1.2  39.6   1.2  39.6  36.3  31.0  36.3 -27.3  39.6   
>> 14.4
>> V11   V12   V21   V22   V11   V12   V21   V22
>> 39.6  29.0  31.0 -38.1  31.0  -3.4 -27.3  55.1
>>
>>
>> The output should be
>>
>> [[1]]
>>        [,1]      [,2]
>> [1,]    -27.3    14.4
>> [2,]     29.0    -38.1
>>
>> [[2]]
>>         [,1]     [,2]
>> [1,]      14.4    29.0
>> [2,]     -38.1    -3.4
>>
>> [[3]]
>>        [,1]     [,2]
>> [1,]    29.0    -38.1
>> [2,]    -3.4     55.1
>>
>> ...
>> Thanks and much appreciated!
>>
>>
>>
>> Muhammad
>>
>> ______________________________________________
>> 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.
>>
>
> 	[[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.

David Winsemius, MD
Heritage Laboratories
West Hartford, CT



More information about the R-help mailing list