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 <dwinsem...@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?

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to