On Mar 11, 2013, at 1:46 PM, Dimitri Liakhovitski <dimitri.liakhovitski at
gmail.com> wrote:
> Hello, and apologies for not providing an example. However, my question is
> more general.
>
> I have a lengthy function. This function is using another internal function
> that modifies the data frame I am reading in. This internal function is
> using the command model.frame (with data and weights inside) and returns a
> data frame I am using for further analyses.
> However, when I try to run my function (which has an lm or a glm commmand)
> using that new data frame and separately defined weights, I get an error:
> can't find your weights object.
> This happens despite the fact that I actually print the weights object
> right before the glm command. The object is there - I can see it using
> ls(). I checked and rechecked - there are no typos.
> Interestingly, this happens only when I run it as a function.
>
> When I rename my arguments, go inside the function and run it line by line
> - I don't get this problem. Clearly, something is happening with my
weights
> in the function environment. I was thinking - can it be that once I've
used
> model.frame - everything else - like glm and lm - is confused as to what
> the weights are and doesn't want to take the weights I hand over to it
but
> is looking for them elsewhere?
>
> Thank you!
> Dimitri
Many discussions on this over the years, along with the 'subset'
argument. From the Details section of ?lm:
All of weights, subset and offset are evaluated in the same way as variables
in formula,
that is first in data and then in the environment of formula.
You might also review:
http://developer.r-project.org/nonstandard-eval.pdf
This post by Thomas from 2006 may be helpful:
http://tolstoy.newcastle.edu.au/R/devel/06/06/5869.html
and the reply from Peter also:
http://tolstoy.newcastle.edu.au/R/devel/06/06/5868.html
Regards,
Marc Schwartz