Ulrike Groemping
2009-Aug-25 15:13 UTC
[Rd] Problem with correct usage of formula environment
Dear all, I am working on a function formula.design that should automatically generate reasonable lm formulae for a number of different designs. All works well as long as all variables used are columns of the design data frame. For one function, I would like to incorporate a dummy variable for center points that is not a column of the design. Without this function, it would work like this (at least version 0.97 of package FrF2): require(FrF2) plan <- FrF2(8,4,ncenter=6) y <- rnorm(14) r.plan<-add.response(plan,y) lm(y~A+B+C+D+!iscube(r.plan), r.plan) Building the formula from within function formula.design works OK at first sight:> formula(r.plan)y ~ A + B + C + D + (!iscube(r.plan)) However, using the formula in a linear model call does not work in this case:> lm(r.plan)Fehler in inherits(x, "factor") : Objekt 'object' nicht gefunden> traceback()12: inherits(x, "factor") 11: is.factor(table) 10: match(x, table, nomatch = 0L) 9: "design" %in% class(design) 8: iscube(object) 7: eval(expr, envir, enclos) 6: eval(predvars, data, env) 5: model.frame.default(formula = r.plan, drop.unused.levels = TRUE) 4: model.frame(formula = r.plan, drop.unused.levels = TRUE) 3: eval(expr, envir, enclos) 2: eval(mf, parent.frame()) 1: lm(r.plan) 9: of the traceback is the first line of function iscube, and it seems that the object r.plan cannot be found here. I have no idea how to fix this. In case it helps: The expression generating the formula in function formula.design is as.formula(paste(response, paste(c(names(factor.names), paste("!iscube(",xnam,")",sep="")), collapse="+"),sep="~")) I am grateful for any pointers that direct me to a fix for this problem and/or to a better understanding of its root cause. Thanks and regards, Ulrike -- View this message in context: http://www.nabble.com/Problem-with-correct-usage-of-formula-environment-tp25136335p25136335.html Sent from the R devel mailing list archive at Nabble.com.
Ulrike Groemping
2009-Aug-26 19:58 UTC
[Rd] Problem with correct usage of formula environment
I have found a fix now - I define the variable "center" (that takes the role of the !iscube below) within the function formula.design, and then using "formula" instead of "as.formula" solves the issue, because it preserves the calling environment - first time I get an idea what this is good for ... I would still be grateful for a pointer to a readable source on the connection between model frames, data=arguments and environments in the context of models and formulae. With best regards, Ulrike Gr?mping Ulrike Groemping wrote:> > Dear all, > > I am working on a function formula.design that should automatically > generate reasonable lm formulae for a number of different designs. All > works well as long as all variables used are columns of the design data > frame. For one function, I would like to incorporate a dummy variable for > center points that is not a column of the design. Without this function, > it would work like this (at least version 0.97 of package FrF2): > > require(FrF2) > plan <- FrF2(8,4,ncenter=6) > y <- rnorm(14) > r.plan<-add.response(plan,y) > lm(y~A+B+C+D+!iscube(r.plan), r.plan) > > Building the formula from within function formula.design works OK at first > sight: >> formula(r.plan) > y ~ A + B + C + D + (!iscube(r.plan)) > > However, using the formula in a linear model call does not work in this > case: >> lm(r.plan) > Fehler in inherits(x, "factor") : Objekt 'object' nicht gefunden >> traceback() > 12: inherits(x, "factor") > 11: is.factor(table) > 10: match(x, table, nomatch = 0L) > 9: "design" %in% class(design) > 8: iscube(object) > 7: eval(expr, envir, enclos) > 6: eval(predvars, data, env) > 5: model.frame.default(formula = r.plan, drop.unused.levels = TRUE) > 4: model.frame(formula = r.plan, drop.unused.levels = TRUE) > 3: eval(expr, envir, enclos) > 2: eval(mf, parent.frame()) > 1: lm(r.plan) > > 9: of the traceback is the first line of function iscube, and it seems > that the object r.plan cannot be found here. I have no idea how to fix > this. In case it helps: The expression generating the formula in function > formula.design is > > as.formula(paste(response, paste(c(names(factor.names), > paste("!iscube(",xnam,")",sep="")), collapse="+"),sep="~")) > > I am grateful for any pointers that direct me to a fix for this problem > and/or to a better understanding of its root cause. > > Thanks and regards, > Ulrike >-- View this message in context: http://www.nabble.com/Problem-with-correct-usage-of-formula-environment-tp25136335p25156303.html Sent from the R devel mailing list archive at Nabble.com.