sapply problem
Joerg van den Hoff said the following on 12/14/2006 7:30 AM:
I have encountered the following problem: I need to extract from a list of lists equally named compenents who happen to be 'one row' data frames. a trivial example would be: a <- list(list( df = data.frame(A = 1, B = 2, C = 3)), list(df = data.frame(A = 4,B = 5,C = 6))) I want the extracted compenents to fill up a matrix or data frame row by row. the obvious thing to do seems: b <- sapply(a, "[[", "df") b <- t(b) now `b' looks all right: b class(b) but it turns out that all elements in this matrix are one element lists: class(b[1,1]) which prevents any further standard processing of `b' (like `colMeans', e.g.) question 1: is their a straightforward way to enforce that `b' contains simple numbers as elements right from the start (instead of something like apply(b, 1:2, "class<-", "numeric") afterwards)?
Try this:
a <- list(list(df = data.frame(A = 1, B = 2, C = 3)),
list(df = data.frame(A = 4, B = 5, C = 6)))
b <- do.call("rbind", sapply(a, "[", "df"))
b
question 2: should not sapply do this further 'simplification' anyway in a situation like this (matrix elements turn out to be one-element lists)?
I think it does as it much as it knows how. I think you might believe
that matrix elements can only contain numeric values. This is not a
valid assumption. Take this example:
> a <- list(1)
> b <- list(2)
> (m <- matrix(c(a, b), 2, 1))
[,1]
[1,] 1
[2,] 2
> class(m[1, 1])
[1] "list"
> class(m[2, 1])
[1] "list"
HTH,
--sundar
regards joerg
______________________________________________ R-help at stat.math.ethz.ch 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.