On Fri, 2 Feb 2007, John Kane wrote:
> I have a simple data base and I want to produce tables
> for each variable. I wrote a simple function
> fn1 <- function(x) {table(x)} where x is a matrix or
> data.frame. and used apply to produce a list of
> tables. Example below.
>
> How do I apply the colnames from the matrix or names
> from the data.frame to label the tables in the results
> in the list. I know that I can do this individually
> but there should be a way to do something like an
> apply but I am missing it
>
> cata <- c( 1,1,6,1,1,NA)
> catb <- c( 1,2,3,4,5,6)
> doga <- c(3,5,3,6,4, 0)
> dogb <- c(2,4,6,8,10, 12)
> rata <- c (NA, 9, 9, 8, 9, 8)
> ratb <- c( 1,2,3,4,5,6)
> bata <- c( 12, 42,NA, 45, 32, 54)
> batb <- c( 13, 15, 17,19,21,23)
> id <- c('a', 'b', 'b', 'c', 'a',
'b')
> site <- c(1,1,4,4,1,4)
> mat1 <- cbind(cata, catb, doga, dogb, rata, ratb,
> bata, batb)
>
> fn1 <- function(x) {table(x)}
> jj <-apply(mat1, 1, fn1) ; jj
>
> ## Slow way to label a list ###
> label(jj[[1]]) <- "cata"
> label(jj[[2]]) <- "catb"
That does not work in vanilla R. There is no function label<- (or label).
Have you a package attached you did not tell us about? (E.g. are you
using the Hmisc system, not the R system?)
You have applied fn1 to the rows and not the columns, and
jj <-apply(mat1, 2, fn1)
would give you the column labels as they do make sense. The way to add
names to a list is names().
--
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595