Hmm, this looks like a buglet/infelicity in update.lm rather than MASS::boxcox 
per se. Moving to R-devel.

I think the story is that update.lm eventually does

        eval(call, parent.frame())

where the call is extracted from the lm object, but call$formula is 
unevaluated, and does not contain environment information like formula(obj) 
would do. Then when the call is evaluated and parent.frame() differs from that 
of the original call, trouble ensues.

A workaround not involving <<- seems to be 

  ...
  obj <- lm(vec ~ 1)
  obj$call$formula <- formula(obj)
  lam <- boxcox(obj)
  ...

I'm not sure whether this is actually fixable. It is the kind of thing where 
you tend to discover that someone, somewhere has actually been relying on 
current behaviour...

-pd

> On 5 Aug 2018, at 14:36 , Jinsong Zhao <jsz...@yeah.net> wrote:
> 
> Hi there,
> 
> I wrote a function that wraps MASS::boxcox as:
> 
> bc <- function(vec) {
>   lam <- boxcox(lm(vec ~ 1))
>   lam <- lam$x[which.max(lam$y)]
>   (vec^lam - 1)/lam
> }
> 
> When I invoke it as:
> 
>> x <- runif(20)
>> bc(x)
> Error in eval(predvars, data, env) : object 'vec' not found
> 
> I have googled, and rewrote the above function as:
> 
> bc <- function(vec) {
>   dat <<- data.frame(vec = vec)
>   lam <- boxcox(lm(vec ~ 1, dat))
>   lam <- lam$x[which.max(lam$y)]
>   rm(dat, envir = .GlobalEnv)
>   (vec^lam - 1)/lam
> }
> 
> It works. But, I am wondering why MASS::boxcox have to wrap in such way that 
> have to use the data in .GlobalEnv.
> 
> Best,
> Jinsong
>       [[alternative HTML version deleted]]
> 
> ______________________________________________
> r-h...@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.

-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Office: A 4.23
Email: pd....@cbs.dk  Priv: pda...@gmail.com

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to