[R] Create matrix with subset from unlist

Muhammad Rahiz muhammad.rahiz at ouce.ox.ac.uk
Fri Jan 29 19:07:09 CET 2010


OK, I've got this. The output prints what I want, but I'm not sure if 
there will be problems in further analysis because the main idea is to 
convert the data from list to matrix. I'm quite concerned with how I 
define xx2.

    xx <- unlist(x)   # Unlist  from lapply + read.table

    a <- seq(1,128,by=4) # creates sequence for increment in loop

    xx2 <- list() # Is this the correct definition?
for (z in 1:32){
 xx2[[z]] <- matrix(xx[c(a[z]:(a[z]+4))],2,2)
}

When I do,
    > mode(xx2)
    > [1] "list"

When I do,
    > xx3 <- xx2[[1]] + 5   # simple test
    > mode(xx3)
    > "numeric"


Am I doing this right?


Muhammad

----------

Muhammad Rahiz wrote:
> 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
>>
>>
>>     
>
> ______________________________________________
> 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.
>



More information about the R-help mailing list