[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 
as.formula(gsub(qvar,"qvartemp",as.expression(mma$formula))).

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