[R] Problem with object inside a function

Duncan Murdoch murdoch at stats.uwo.ca
Sun Apr 20 19:17:26 CEST 2008

On 20/04/2008 12:32 PM, Ronaldo Reis Junior wrote:
> Em Dom 20 Abr 2008, Duncan Murdoch escreveu:
>> On 20/04/2008 9:40 AM, Ronaldo Reis Junior wrote:
>>> Hi all,
>>> I have a problem with an object inside a formula in a function that I
>>> make.
>>> I create an object named qvartemp. This object is OK, look the levels:
>>>> print(levels(qvartemp))
>>> [1] "baixomedio" "alto"
>>> Now I create a new object with a new formula:
>>>> new.form <- as.formula(gsub(qvar,"qvartemp",as.expression(mma$formula)))
>>> Look this new object:
>>>> print(new.form)
>>> Riqueza ~ Biomassa * qvartemp
>>> Now here is the problem, I try to update an existing model (mma) changing
>>> the formula by the new.form
>>> mmaa <- update(mma,new.form)
>>> But my function is aborted with this message:
>>> Error in eval(expr, envir, enclos) : object "qvartemp" not found
>>> If I create this object qvartemp in R section manually it my function
>>> work, because it get the object from my workspace (but it is usefull just
>>> for testing), but my function dont find this object qvartemp created
>>> inside the function.
>>> If I run all my function line by line without use the function it work, I
>>> think that is because in this case the object is created in my workspace.
>>> But when I run a function the object is created only in memory (not in my
>>> workspece) and in this case update dont find this object.
>>> Anybody can suggest any Idea to fix it? I necessary I send my function
>>> and a example.
>> Formulas have attached environments; that's where they look for the
>> variables they use.  You created new.form, but didn't give it the
>> environment of the old one.
>> I think all you need is
>> environment(new.form) <- environment(mma$formula)
>> Duncan Murdoch
> Hi Duncan,
> thanks for your quick reply. I think that is not the problem, because with glm 
> or lm the formula inside the new.form work, only on update it dont work.
> But I try this solution, I put new.form enclosed in an environment:
> environment(new.form) <- 
> environment(as.formula(gsub(qvar,"qvartemp",as.expression(mma$formula))))
> But the error is the same.

Of course it is.  That operation does nothing, since the value of 
new.form was already 

If you want any more help, you're going to have to provide a 
reproducible example.

Duncan Murdoch

More information about the R-help mailing list