Re: [R] Arguments to lm() within a function - object not found

2008-08-13 Thread Pete Berlin
Thanks very much for the quick reply. I had looked at the help for lm,
but I clearly skimmed over the critical part explaining where weights is
evaluated.

Thanks,
Pete



On 13/8/2008, Prof Brian Ripley wrote:

>On Wed, 13 Aug 2008, Pete Berlin wrote:
>
>> Hi all,
>>
>> I'm having some difficulty passing arguments into lm() from within a
>> function, and I was hoping someone wiser in the ways of R could tell me
>> what I'm doing wrong. I have the following:
>>
>> lmwrap <- function(...) {
>>
>>  wts <- somefunction()
>>  print(wts) # This works, wts has the values I expect
>>  fit <- lm(weights=wts,...)
>>
>>  return(fit)
>> }
>>
>> If I call my function lmwrap, I get the the following error:
>>
>>> lmwrap(a~b)
>> Error in eval(expr, envir, enclos) : object "wts" not found
>
>Correct.  The help (?lm) says
>
>  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'.
>
>
>>
>> A traceback gives me the following:
>>
>> 8: eval(expr, envir, enclos)
>> 7: eval(extras, data, env)
>> 6: model.frame.default(formula = ..1, weights = wts, drop.unused.levels =
>> TRUE)
>> 5: model.frame(formula = ..1, weights = wts, drop.unused.levels = TRUE)
>> 4: eval(expr, envir, enclos)
>> 3: eval(mf, parent.frame())
>> 2: lm(weights = wts, ...)
>> 1: wraplm(a ~ b)
>>
>> It seems like whatever environment lm is trying to eval wts in doesn't
>> have it defined.
>>
>> Could anyone tell me what I'm doing wrong?
>>
>> As a sidenote, I do have a workaround, but this strikes me as really the
>> wrong thing to do. I replace the call to lm with:
>> eval(substitute(lm(weights = dummy,...),list(dummy=wts)))
>> which works.
>
>It's one workaround, but working with the scoping rules is better.  Hint:
>use the 'data' argument to lm.
>

__
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.


Re: [R] Arguments to lm() within a function - object not found

2008-08-13 Thread Prof Brian Ripley

On Wed, 13 Aug 2008, Pete Berlin wrote:


Hi all,

I'm having some difficulty passing arguments into lm() from within a
function, and I was hoping someone wiser in the ways of R could tell me
what I'm doing wrong. I have the following:

lmwrap <- function(...) {

 wts <- somefunction()
 print(wts) # This works, wts has the values I expect
 fit <- lm(weights=wts,...)

 return(fit)
}

If I call my function lmwrap, I get the the following error:


lmwrap(a~b)

Error in eval(expr, envir, enclos) : object "wts" not found


Correct.  The help (?lm) says

 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'.




A traceback gives me the following:

8: eval(expr, envir, enclos)
7: eval(extras, data, env)
6: model.frame.default(formula = ..1, weights = wts, drop.unused.levels =
TRUE)
5: model.frame(formula = ..1, weights = wts, drop.unused.levels = TRUE)
4: eval(expr, envir, enclos)
3: eval(mf, parent.frame())
2: lm(weights = wts, ...)
1: wraplm(a ~ b)

It seems like whatever environment lm is trying to eval wts in doesn't
have it defined.

Could anyone tell me what I'm doing wrong?

As a sidenote, I do have a workaround, but this strikes me as really the
wrong thing to do. I replace the call to lm with:
eval(substitute(lm(weights = dummy,...),list(dummy=wts)))
which works.


It's one workaround, but working with the scoping rules is better.  Hint: 
use the 'data' argument to lm.



--
Brian D. Ripley,  [EMAIL PROTECTED]
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel:  +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UKFax:  +44 1865 272595

__
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.


[R] Arguments to lm() within a function - object not found

2008-08-13 Thread Pete Berlin
Hi all,

I'm having some difficulty passing arguments into lm() from within a
function, and I was hoping someone wiser in the ways of R could tell me
what I'm doing wrong. I have the following:

lmwrap <- function(...) {

  wts <- somefunction()
  print(wts) # This works, wts has the values I expect
  fit <- lm(weights=wts,...)

  return(fit)
}

If I call my function lmwrap, I get the the following error:

> lmwrap(a~b)
Error in eval(expr, envir, enclos) : object "wts" not found

A traceback gives me the following:

8: eval(expr, envir, enclos)
7: eval(extras, data, env)
6: model.frame.default(formula = ..1, weights = wts, drop.unused.levels =
TRUE)
5: model.frame(formula = ..1, weights = wts, drop.unused.levels = TRUE)
4: eval(expr, envir, enclos)
3: eval(mf, parent.frame())
2: lm(weights = wts, ...)
1: wraplm(a ~ b)

It seems like whatever environment lm is trying to eval wts in doesn't
have it defined.

Could anyone tell me what I'm doing wrong?

As a sidenote, I do have a workaround, but this strikes me as really the
wrong thing to do. I replace the call to lm with:
eval(substitute(lm(weights = dummy,...),list(dummy=wts)))
which works.

Thanks
Pete

__
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.


[R] Arguments to lm() within a function - object not found

2008-08-13 Thread Pete Berlin
Hi all,

I'm having some difficulty passing arguments into lm() from within a
function, and I was hoping someone wiser in the ways of R could tell me
what I'm doing wrong. I have the following:

lmwrap <- function(...) {

  wts <- somefunction()
  print(wts) # This works, wts has the values I expect
  fit <- lm(weights=wts,...)

  return(fit)
}

If I call my function lmwrap, I get the the following error:

> lmwrap(a~b)
Error in eval(expr, envir, enclos) : object "wts" not found

A traceback gives me the following:

8: eval(expr, envir, enclos)
7: eval(extras, data, env)
6: model.frame.default(formula = ..1, weights = wts, drop.unused.levels =
TRUE)
5: model.frame(formula = ..1, weights = wts, drop.unused.levels = TRUE)
4: eval(expr, envir, enclos)
3: eval(mf, parent.frame())
2: lm(weights = wts, ...)
1: wraplm(a ~ b)

It seems like whatever environment lm is trying to eval wts in doesn't
have it defined.

Could anyone tell me what I'm doing wrong?

As a sidenote, I do have a workaround, but this strikes me as really the
wrong thing to do. I replace the call to lm with:
eval(substitute(lm(weights = dummy,...),list(dummy=wts)))
which works.

Thanks
Pete

__
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.