[R] lm looking for weights outside of the user-defined function
David Winsemius
dwinsemius at comcast.net
Fri Oct 22 15:24:35 CEST 2010
On Oct 22, 2010, at 9:18 AM, Dimitri Liakhovitski wrote:
> David,
> I undersand - and I am sure what you are suggesting should work. But I
> just can't understand why it's not grabbing things INSIDE the
> environment of the formula first.
I am not sure that either one of us understand what is meant by "the
environment of the formula".
> I've already tried to define the weights outside of the function - and
> it finds them.
>
> But shouldn't it go in this order?
> 1. Look in the data frame
> 2. Look in the environment of the user-defined function
> 3. Look outside.
Hey, I only work here, I don't make the rules, I just follow them. I
agree that one might guess that to be the search order, but it is not
what is documented.
--
David Winsemius, MD
West Hartford, CT
>
> Dimitri
>
> On Fri, Oct 22, 2010 at 9:15 AM, David Winsemius <dwinsemius at comcast.net
> > wrote:
>>
>> On Oct 22, 2010, at 9:01 AM, Dimitri Liakhovitski wrote:
>>
>>> Dear R'ers,
>>>
>>> I am fighting with a problem that is driving me crazy. I use "lm" in
>>> my user-defined function, but it seems to be looking for weights
>>> outside of my function's environment:
>>>
>>> ### Generating example data:
>>> x<-data.frame(y=rnorm(100,0,1),a=rnorm(100,1,1),b=rnorm(100,2,1))
>>> myweights<-runif(100)
>>> data.for.regression<-x[1:3]
>>>
>>> ### Creating function "weighted.reg":
>>> weighted.reg=function(formula, MyData, filename,WeightsVector)
>>> {
>>> print(dim(MyData))
>>> print(filename)
>>> print(length(WeightsVector))
>>> regr.f<-
>>> lm(formula,MyData,weights=WeightsVector,na.action=na.omit)
>>> results<-as.data.frame(round(summary(regr.f)$coeff,3))
>>> write.csv(results,file=filename)
>>> return(results)
>>> }
>>>
>>> ### Running "weighted.reg" with my data:
>>> reg2<-weighted.reg(y~., MyData=x, WeightsVector=myweights,
>>> filename="TEST.csv")
>>>
>>>
>>> I get an error: Error in eval(expr, envir, enclos) : object
>>> 'WeightsVector' not found
>>> Notice, that the function correctly prints length(WeightsVector).
>>> But
>>> it looks like "lm" is looking for weights (in the 4th line of the
>>> function) OUTSIDE the function and does not see WeightsVector.
>>
>> Have you tried putting WeightsVector in the "x" dataframe? That
>> would seem
>> to reduce the potential for environmental conflation.
>>
>> From the details section of help(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."
>>
>>
>>> Why is it looking outside the function for the object that has just
>>> been defined inside the function?
More information about the R-help
mailing list