[R] Can a matrix have 'list' as rows/columns?
David Winsemius
dwinsemius at comcast.net
Tue Apr 17 13:52:38 CEST 2012
On Apr 17, 2012, at 12:13 AM, Worik R wrote:
> After a lot of processing I get a matrix into M. I expected each
> row and
> column to be a vector. But it is a list.
This behavior is not the result of limitation in how R's sapply might
have processed a purely numeric set of results, but is because you
(probably) returned a hetergeneous set of classes rom you inner
function. Assuming that "last" is actually function(x){tail,1}, then
the structure of M is
str(M)
List of 6
$ : chr "aaa"
$ : num 0.224
$ : chr "bbb"
$ : num 0.768
$ : chr "ccc"
$ : num 0.904
- attr(*, "dim")= int [1:2] 2 3
- attr(*, "dimnames")=List of 2
..$ : chr [1:2] "Name" "Value"
..$ : chr [1:3] "aaa" "bbb" "ccc"
Had the result been a more homogeneous collection, I sapply would have
returned an array of atomic numeric vectors. Try just returning a
number:
> M2 <- sapply(Qm, function(nm, DF){last(DF[DF[,
"Name"]==nm,"Value"])}, DF)
> class(M)
[1] "numeric"
> str(M2)
Named num [1:3] 0.6184 0.0446 0.3605
- attr(*, "names")= chr [1:3] "aaa" "bbb" "ccc"
--
David.
>
> R-Inferno says...
>
> "Arrays (including matrices) can be subscripted with a matrix of
> positive
> numbers. The subscripting matrix has as many columns as there are
> dimensions
> in the array—so two columns for a matrix. The result is a vector
> (not an
> array)
> containing the selected items."
>
> My version of R:
> version.string R version 2.12.1 (2010-12-16)
>
> Here is an example...
>
>> Qm <- c("aaa", "bbb", "ccc")
>> DF <- data.frame(Name=sample(Qm, replace=TRUE, size=22),
>> Value=runif(22),
> stringsAsFactors=FALSE)
>> M <- sapply(Qm, function(nm, DF){last(DF[DF[, "Name"]==nm,])}, DF)
>> class(M)
> [1] "matrix"
>> class(M[,1])
> [1] "list"
>> class(M[1,])
> [1] "list"
>> M
> aaa bbb ccc
> Name "aaa" "bbb" "ccc"
> Value 0.4702648 0.274498 0.5529691
>> DF
> Name Value
> 1 ccc 0.99948920
> 2 aaa 0.51921281
> 3 aaa 0.10803943
> 4 aaa 0.82265847
> 5 ccc 0.83237260
> 6 bbb 0.88250933
> 7 aaa 0.41836131
> 8 aaa 0.66197290
> 9 ccc 0.01911771
> 10 ccc 0.99994699
> 11 bbb 0.35719884
> 12 ccc 0.86274858
> 13 bbb 0.57528579
> 14 aaa 0.12452158
> 15 aaa 0.44167731
> 16 aaa 0.11660019
> 17 ccc 0.55296911
> 18 aaa 0.12796890
> 19 bbb 0.44595741
> 20 bbb 0.93024768
> 21 aaa 0.47026475
> 22 bbb 0.27449801
>>
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> 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.
David Winsemius, MD
West Hartford, CT
More information about the R-help
mailing list