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

Peter Dalgaard P.Dalgaard at biostat.ku.dk
Mon Jun 4 15:46:53 CEST 2007


Andrew Yee wrote:
> 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]))
>
>   
nrow()?

Oops, yes. I didn't notice that your data are transposed relative to the
usual "cases x variables" layout. 

So mapply() is not going to work unless you use
as.data.frame(t(raw.sample)) first.

     -pd
> Thanks,
> Andrew
>
>
>  On 6/4/07, Peter Dalgaard <P.Dalgaard at 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 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.
>>>>
>>>>
>>>>         
>>>       
>> --
>>   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 at biostat.ku.dk)                  FAX: (+45)
>> 35327907
>>
>>
>>     
>
> 	[[alternative HTML version deleted]]
>
>   
> ------------------------------------------------------------------------
>
> ______________________________________________
> 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.
>   


-- 
   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 at biostat.ku.dk)                  FAX: (+45) 35327907



More information about the R-help mailing list