[R] objects of class "matrix" and mode "list"? [Broadcast]

Stephen Tucker brown_emu at yahoo.com
Sun Mar 25 07:25:24 CEST 2007


Hi Andy,

I hadn't realized such objects (list matrices, list arrays, data frames with
nested lists) existed before, but now that I do I am seeing the documentation
with new eyes. I see that the pages for sapply(), lapply(), and class
coercion functions are true to their word.

Thanks,

Stephen


--- "Liaw, Andy" <andy_liaw at merck.com> wrote:

> It may help to (re-)read ?sapply a bit more in detail.  Simplification
> is done only if it's "possible", and what "possible" means is defined
> there.
> 
> A list is a vector whose elements can be different objects, but a vector
> nonetheless.  Thus a list can have dimensions.  E.g.,
> 
> R> a <- list(1, 1:2, 3, c("abc", "def"))
> R> dim(a) <- c(2, 2)
> R> a
>      [,1]      [,2]       
> [1,] 1         3          
> [2,] Integer,2 Character,2
> 
> That sometimes can be extremely useful (not like the example above!).
> 
> Andy 
> 
> From: Stephen Tucker
> > 
> > Hello everyone,
> > 
> > I cannot seem to find information about objects of class 
> > "matrix" and mode
> > "list", and how to handle them (apart from flattening the 
> > list). I get this
> > type of object from using sapply(). Sorry for the long 
> > example, but the code
> > below illustrates how I get this type of object. Is anyone aware of
> > documentation regarding this object?
> > 
> > Thanks very much,
> > 
> > Stephen
> > 
> > ===== begin example ====
> > 
> > # I am just making up a fake data set
> > df <- data.frame(Day=rep(1:3,each=24),Hour=rep(1:24,times=3),
> >                  Name1=rnorm(24*3),Name2=rnorm(24*3))
> > 
> > # define a function to get a set of descriptive statistics
> > tmp <- function(x) {
> >   # this function will accept a data frame
> >   # and return a 1-row data frame of
> >   # max value, colname of max, min value, and colname of min
> >   return(data.frame(maxval=max(apply(x,2,max)),
> >                     maxloc=names(x)[which.max(apply(x,2,max))],
> >                     minval=min(apply(x,2,min)),
> >                     minloc=names(x)[which.min(apply(x,2,min))]))
> > }
> > 
> > # Now applying function to data:
> > # (1) split the data table by Day with split()
> > # (2) apply the tmp function defined above to each data frame from (1)
> > #     using lapply()
> > # (3) transpose the final matrix and convert it to a data frame
> > #     with mixed characters and numbers
> > #     using as.data.frame(), lapply(), and type.convert()
> > 
> > > final <- 
> > as.data.frame(lapply(as.data.frame(t(sapply(split(df[,-c(1:2)],
> > +                                                           
> > f=df$Day),tmp))),
> > +                               type.convert,as.is=TRUE))
> > Error in type.convert(x, na.strings, as.is, dec) : 
> > 	the first argument must be of mode character
> > 
> > I thought sapply() would give me a data frame or matrix, which I would
> > transpose into a character matrix, to which I can apply type.convert()
> > and get the same matrix as what I would get from these two lines (Fold
> > function taken from Gabor's post on R-help a few years ago):
> > 
> > Fold <- function(f, x, L) for(e in L) x <- f(x, e)
> > final2 <- Fold(rbind,vector(),lapply(split(df[,-c(1:2)],f=day),tmp))
> > 
> > > print(c(class(final2),mode(final2)))
> > [1] "data.frame" "list"  
> > 
> > ====================================================
> > However, by my original method, sapply() gives me a matrix 
> > with mode, "list"
> > 
> > intermediate1 <- sapply(split(df[,-c(1:2)],f=df$Day),tmp)
> > > print(c(class(intermediate1),mode(intermediate1)))
> > [1] "matrix" "list"  
> > 
> > Transposing, still a matrix with mode list, not character:
> > 
> > intermediate2 <- t(sapply(split(df[,-c(1:2)],f=day),tmp))
> > > print(c(class(intermediate2),mode(intermediate2)))
> > [1] "matrix" "list"  
> > 
> > Unclassing gives me the same thing...
> > 
> > > print(c(class(unclass(intermediate2)),mode(unclass(intermediate2))))
> > [1] "matrix" "list"  
> > 
> > 
> > 
> > 
> >  
> > ______________________________________________________________
> > ______________________
> > Be a PS3 game guru.
> > 
> > ______________________________________________
> > 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.
> > 
> > 
> > 
> 
> 
>
------------------------------------------------------------------------------
> Notice:  This e-mail message, together with any attachment...{{dropped}}



More information about the R-help mailing list