Skip to content

Apply or Tapply to Build Set of Tables

3 messages · Sparks, John, jim holtman, Kenn Konstabel

#
Dear R Helpers,

First, I apologize for asking for help on the first of my topics.  I have
been looking at the posts and pages for apply, tapply etc, and I know that
the solution to this must be ridiculously easy, but I just can't seem to
get my brain around it.  If I want to produce a set of tables for all the
variables in my data, how can I do that without having to type them into
the table command one by one.  So, I would like to use (t? s? r?)apply to
use one command instead of the following set of table commands:

data(infert, package = "datasets")
attach(infert)

table.education<-table(education)
table.age<-table(age)
table.parity<-table(parity)
etc.


To make matters worse, what I subsequently need is the chi-square for each
and all of the pairs of variables.  Such as:

chi.education.age<-chisq.test(table(education,age))
chi.education.parity<-chisq.test(table(education,parity))
chi.age.parity<-chisq.test(table(age,parity))
etc.

Your guidance would be much appreciated.

--John J. Sparks, Ph.D.
#
untested

x <- lapply(names(infert),function(a)table(infert[[a]]))

extend this to the rest of your problem.

Sent from my iPad
On May 23, 2011, at 20:33, "Sparks, John James" <jspark4 at uic.edu> wrote:

            
#
On Tue, May 24, 2011 at 4:01 AM, Jim Holtman <jholtman at gmail.com> wrote:
This part can be simpler:

lapply(infert,table)

But extending it to the rest of the problem (i.e., 2-way tables) is
not trivial and can be confusing.

# 1
lapply(infert, function(a) mapply(chisq.test, x=infert,
MoreArgs=list(y=a), SIMPLIFY=FALSE))

# 2
combn(names(infert), 2, function(x) chisq.test(infert[[x[1] ]],
infert[[x[2] ]]), simplify=FALSE)


Many people would prefer a loop instead.