[R] a question of substitute

Adrian Dusa dusa.adrian at gmail.com
Tue Jan 9 14:34:28 CET 2007


On Tuesday 09 January 2007 15:14, Gabor Grothendieck wrote:
> oneway.test is using substitute on its arguments so its literally
> getting formula rather than the value of formula.

Ah-haa... I understand now. Thanks for the tips, they both work as expected.
Best,
Adrian

> Try these: 
>
> fun.3 <- function(formula) {
> 	mc <- match.call()
> 	mc[[1]] <- as.name("oneway.test")
> 	eval.parent(mc)
> }
> fun.3(values ~ group)
>
> fun.4 <- function(formula) {
> 	do.call(oneway.test, list(formula))
> }
> fun.4(values ~ group)
>
> On 1/9/07, Adrian Dusa <dusa.adrian at gmail.com> wrote:
> > Hi all,
> >
> > I want to write a wrapper for an analysis of variance and I face a
> > curious problem. Here are two different wrappers:
> >
> > fun.1 <- function(formula) {
> >    summary(aov(formula))
> > }
> >
> > fun.2 <- function(formula) {
> >    oneway.test(formula)
> > }
> >
> > values <- c(15, 8, 17, 7, 26, 12, 8, 11, 16, 9, 16,
> >            24, 20, 19, 9, 17, 11, 8, 15, 6, 14)
> > group <- rep(1:3, each=7)
> >
> > # While the first wrapper works just fine:
> > fun.1(values ~ group)
> >
> > # the second throws an error:
> > fun.2(values ~ group)
> > Error in substitute(formula)[[2]] : object is not subsettable
> >
> > ###
> >
> > I also tried binding the two vectors in a data.frame, with no avail.
> > I did find a hack, creating two new vectors inside the function and
> > creating a fresh formula, so I presume this has something to do with
> > environments.
> >
> > Could anybody give me a hint on this?
> > Thank you,
> > Adrian
> >
> > --
> > Adrian Dusa
> > Romanian Social Data Archive
> > 1, Schitu Magureanu Bd
> > 050025 Bucharest sector 5
> > Romania
> > Tel./Fax: +40 21 3126618 \
> >          +40 21 3120210 / int.101
> >
> > ______________________________________________
> > 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.

-- 
Adrian Dusa
Arhiva Romana de Date Sociale
Bd. Schitu Magureanu nr.1
050025 Bucuresti sectorul 5
Romania
Tel./Fax: +40 21 3126618 \
          +40 21 3120210 / int.101



More information about the R-help mailing list