[R] getting t.test to work with apply()

ONKELINX, Thierry Thierry.ONKELINX at inbo.be
Mon Jun 4 15:43:53 CEST 2007


Apply passes the row as a vector, not as a dataframe. So you need to remove the colons in x[, alive] and x[, dead]

results <-apply(raw.sample,1,function(x) t.test(x[alive],x[dead]))

Cheers,

Thierry
----------------------------------------------------------------------------
ir. Thierry Onkelinx
Instituut voor natuur- en bosonderzoek / Reseach Institute for Nature and Forest
Cel biometrie, methodologie en kwaliteitszorg / Section biometrics, methodology and quality assurance
Gaverstraat 4
9500 Geraardsbergen
Belgium
tel. + 32 54/436 185
Thierry.Onkelinx op inbo.be
www.inbo.be 

Do not put your faith in what statistics say until you have carefully considered what they do not say.  ~William W. Watt
A statistical analysis, properly conducted, is a delicate dissection of uncertainties, a surgery of suppositions. ~M.J.Moroney

 

> -----Oorspronkelijk bericht-----
> Van: r-help-bounces op stat.math.ethz.ch 
> [mailto:r-help-bounces op stat.math.ethz.ch] Namens Andrew Yee
> Verzonden: maandag 4 juni 2007 15:34
> Aan: Peter Dalgaard
> CC: r-help op stat.math.ethz.ch
> Onderwerp: Re: [R] getting t.test to work with apply()
> 
> Thanks for everyone's suggestions.
> 
> I did try
> 
>  results <-apply(raw.sample,1,function(x) t.test(x[,alive],x[,dead]))
> 
> However, I get:
> 
> "Error in x[, alive] : incorrect number of dimensions"
> 
> Full disclosure, raw.sample is a data.frame, and I am using 
> alive and dead as indexing vectors.
> 
> On the other hand, the lapply suggestion works better.
> 
> results <- lapply(1:nrow(raw.sample), function(i) t.test(raw.sample
> [i,alive],raw.sample[i,dead]))
> 
> Thanks,
> Andrew
> 
> 
>  On 6/4/07, Peter Dalgaard <P.Dalgaard op biostat.ku.dk> wrote:
> 
> > Petr Klasterecky wrote:
> > > Andrew Yee napsal(a):
> > >
> > >> Hi, I'm interested in using apply() with t.test() on a 
> data.frame.
> > >>
> > >> Specifically, I'd like to use apply() to do the following:
> > >>
> > >>  t.test(raw.sample[1,alive],raw.sample[1,dead])
> > >> t.test(raw.sample[2,alive],raw.sample[2,dead])
> > >>  t.test(raw.sample[3,alive],raw.sample[3,dead])
> > >> etc.
> > >>
> > >> I tried the following,
> > >>
> > >> apply(raw.sample,1,function(x) 
> t.test(raw.sample[,alive],raw.sample
> > [,dead]))
> > >>
> > >
> > > Two comments:
> > > 1) apply() works on arrays. If your dataframe only has numeric 
> > > values, turn it (or its copy) to a matrix via 
> as.matrix(). If it has 
> > > mixed variables, take only the numeric part for t-tests. The 
> > > conversion is made implicitly but explicit asking for it 
> cannot hurt.
> > > 2) the main problem - you are using a wrong argument to t.test
> > >
> > > The call should look like
> > > apply(as.matrix(raw.sample), 1, function(x){t.test(x[alive], 
> > > x[dead])})
> > >
> > > assuming 'alive' and 'dead' are logical vectors of the 
> same length 
> > > as
> > 'x'.
> > >
> > > Petr
> > >
> > Notice also that the other apply-style functions may give an easier 
> > route to the goal:
> >
> > lapply(1:N, function(i) 
> > t.test(raw.sample[i,alive],raw.sample[i,dead]))
> >
> > or (maybe, depends on raw.sample being a data frame and alive/dead 
> > being indexing vectors)
> >
> > mapply(t.test, raw.sample[,alive], raw.sample[,dead])
> >
> > >
> > >> but it gives me a list of identical results.
> > >>
> > >>
> > >> Thanks,
> > >> Andrew
> > >>
> > >>      [[alternative HTML version deleted]]
> > >>
> > >> ______________________________________________
> > >> R-help op 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.
> > >>
> > >>
> > >
> > >
> >
> >
> > --
> >   O__  ---- Peter Dalgaard             Øster Farimagsgade 5, Entr.B
> > c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
> > (*) \(*) -- University of Copenhagen   Denmark          Ph:  (+45)
> > 35327918
> > ~~~~~~~~~~ - (p.dalgaard op biostat.ku.dk)                  FAX: (+45)
> > 35327907
> >
> >
> 
> 	[[alternative HTML version deleted]]
> 
>



More information about the R-help mailing list