Create matrix with subset from unlist
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.