Erich Neuwirth
2005-Aug-22 21:38 UTC
[Rd] boxplot.formula and questions about calls and formulas
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