On Jan 29, 2010, at 1:07 PM, Muhammad Rahiz wrote:

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?
It will "work".
for (z in 1:32){
xx2[[z]] <- matrix(xx[c(a[z]:(a[z]+4))],2,2) # which would be a list of matrices
}


If you go back to your original posting, you could shortcut the whole process since you already had a list of 32 dataframes (lists) . That was the starting point. If a list is acceptable, then skip the intermediate array.

> class(x[[1]])
[1] "data.frame"
> class(lapply(x, data.matrix)[[1]])
[1] "matrix"

So just do this:

xx2 <- lapply(x, data.matrix)  # a list of matrices

--
David.


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@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

______________________________________________
R-help@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.

Reply via email to