[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