Re: [R] Problem with object inside a function

From: Duncan Murdoch <>
Date: Sun, 20 Apr 2008 13:17:26 -0400

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 mailing list PLEASE do read the posting guide and provide commented, minimal, self-contained, reproducible code. Received on Sun 20 Apr 2008 - 17:21:56 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Sun 20 Apr 2008 - 17:30:35 GMT.

Mailing list information is available at Please read the posting guide before posting to the list.

list of date sections of archive