[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