From groemping at bht-berlin.de  Wed Aug 26 21:58:04 2009
From: groemping at bht-berlin.de (Ulrike Groemping)
Date: Wed, 26 Aug 2009 12:58:04 -0700 (PDT)
Subject: [Rd] Problem with correct usage of formula environment
In-Reply-To: <25136335.post@talk.nabble.com>
References: <25136335.post@talk.nabble.com>
Message-ID: <25156303.post@talk.nabble.com>


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.



[Rd] Problem with correct usage of formula environment
Ulrike Groemping