[R] Create matrix with subset from unlist

Muhammad Rahiz muhammad.rahiz at ouce.ox.ac.uk
Fri Jan 29 18:43:14 CET 2010


Thanks David & Dennis,

I may have found something.

Given that the object xx is the product of unlist(x), to create a 2x2 
matrix with subsets, I could do,

 > y <- matrix(xx[c(1:4)], 2, 2).

This returns,

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

If I do,

 > y2 <- matrix(xx[c(5:8)],2,2)

it returns,

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

The results are exactly what I want to achieve.

The question is, how can I incorporate the increment in a for loop so that it becomes

c(1:4)
c(5:8)
c(9:12) and so on

How should I modify this code?

y <- 		# typeof ? 
for (i in 1:32){
 y[[i]] <- matrix(xx[c(1:4)],2,2)
}


Muhammad 



David Winsemius wrote:
> 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
>
>



More information about the R-help mailing list