[R] formula parsing, using parts ...

Russell Senior seniorr at aracnet.com
Tue Oct 28 11:20:54 CET 2003


>>>>> "Uwe" == Uwe Ligges <ligges at statistik.uni-dortmund.de> writes:

Russell> I am writing a little abstraction for a series of tests. For
Russell> example, I am running an anova and kruskal.test on a
Russell> one-factor model.  That isn't a particular problem, I have an
Russell> interface like: my.function <- function(model,data) {
Russell> print(deparse(substitute(data))) a <- anova(lm(formula,data))
Russell> print(a) if(a$"Pr(>F)"[1] < 0.05) { pairwise.t.test(???)  } b
Russell> <- kruskal.test(formula,data) print(b) if ...  } I want to
Russell> run each test, then depending on the resulting p-value, run
Russell> pairwise tests.  I am getting into trouble where I put the
Russell> ??? above.  The pairwise.t.test has a different interface,
Russell> that seems to want me to dismember the formula into
Russell> constituent parts to feed in.  The other alternative is to
Russell> give my.function the constituent parts and let it build the
Russell> model.  I haven't figured out how to do either one.  Can
Russell> someone give me some pointers?

Uwe> See ?formula and its "See Also" Section on how to do formula
Uwe> manipulation. There's also an example on how to construct a
Uwe> formula.

Russell> In order to use the 'as.formula(paste(response," ~
Russell> ",factor))' approach, response and factor seem to need to be
Russell> strings (at least they seem to if response is "log(x)" or the
Russell> like).  Whereas, for pairwise.t.test they need to be names.
Russell> What is the proper way to do that?


Uwe> In order to run pairwise.t.test() you can simply get() the values
Uwe> from objects:

Uwe> Let's change the example in ?pairwise.t.test:

Uwe>   data(airquality) 
Uwe>   attach(airquality) 
Uwe>   Month <- factor(Month, labels = month.abb[5:9]) 
Uwe>   x <- "Ozone" 
Uwe>   y <- "Month"
Uwe>   pairwise.t.test(get(x), get(y))

Suppose I want x to be "log(Ozone)"?  The get() function doesn't help
me there.

-- 
Russell Senior         ``I have nine fingers; you have ten.''
seniorr at aracnet.com




More information about the R-help mailing list