[Rd] Questions about calls and formulas

From: Erich Neuwirth <erich.neuwirth_at_univie.ac.at>
Date: Mon 22 Aug 2005 - 21:39:53 GMT


I am trying to adapt boxplot.formula (in graphics) to accept an additional parameter, weights.
I already managed to adapt boxplot.default to do this.

boxplot.formula prepares the data for a call to boxplot.default and to achieve that does the following: It takes a formula like

    x~g*h

as the first argument, and then by using

    m <- match.call(expand.dots = FALSE)

saves the call. It transforms the call

    m$na.action <- na.action # force use of default for this method     m[[1]] <- as.name("model.frame")

and then evaluates the modified call

    mf <- eval(m, parent.frame())

    print(m)
gives

    model.frame(formula = x ~ g * h)

Then it uses components of mf for the call to boxplot.default.

m has a component m$formula containing the parsed model formula. mode(m$formula) is "call".
In our case, deparse(m$formula) gives a string representation of the formula: "x~g*h".
I want to replace the response variable (in our case x) by the weights variable, which in the string expression can be done easily with strsplit and paste. Then I need to reconvert the modified string to a call.

So I create newmodelstring<-"weights~g*h" and try

    m$formula<-as.call(parse(newmodelstring))

    print(m)
gives

    model.frame(formula = weights ~ g * h())

When I try to evaluate the modified m this does not work. When I try to evaluate m with this modification I get

Error in model.frame(formula = weights ~ g * h()) :

        attempt to apply non-function

Is there a way to get rid of the empty parentheses at the end of the formula? I think then my code could work.

-- 
Erich Neuwirth, Didactic Center for Computer Science
University of Vienna
Visit our SunSITE at http://sunsite.univie.ac.at
Phone: +43-1-4277-39902 Fax: +43-1-4277-9399

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Received on Tue Aug 23 07:45:15 2005

This archive was generated by hypermail 2.1.8 : Mon 20 Feb 2006 - 03:21:18 GMT