[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