[Rd] fragility of MASS::boxcox

Ben Bolker bbo|ker @end|ng |rom gm@||@com
Mon Mar 15 03:03:24 CET 2021


   MASS::boxcox fails if (1) the data is a data frame called 'attr' (2) 
user doesn't specify y=TRUE, qr=TRUE in the initial lm() fit.

   boxcox.lm() calls update(), which apparently finds the built-in 
'attr' object instead of the data frame in the global environment.

   Is there anything to be done about this (other than the old "don't 
use names for your objects that are the same as built-in R functions") ?

   cheers
    Ben Bolker


library(MASS)
m1 <- lm(height~age, data=Loblolly)
boxcox(m1)
attr <- Loblolly
m3 <- update(m1, data=attr, y=TRUE, qr=TRUE)  ## fine
m2 <- update(m1, data=attr)
boxcox(m2)

 > Error in model.frame.default(formula = height ~ age, data = attr, 
drop.unused.levels = TRUE) :
   'data' must be a data.frame, environment, or list

Error in model.frame.default(formula = height ~ age, data = attr, 
drop.unused.levels = TRUE) :
   'data' must be a data.frame, environment, or list
 > traceback()
12: stop("'data' must be a data.frame, environment, or list")
11: model.frame.default(formula = height ~ age, data = attr, 
drop.unused.levels = TRUE)
10: stats::model.frame(formula = height ~ age, data = attr, 
drop.unused.levels = TRUE)
9: eval(mf, parent.frame())
8: eval(mf, parent.frame())
7: lm(formula = height ~ age, data = attr, y = TRUE, qr = TRUE)
6: eval(call, parent.frame())
5: eval(call, parent.frame())
4: update.default(object, y = TRUE, qr = TRUE, ...)
3: update(object, y = TRUE, qr = TRUE, ...)
2: boxcox.lm(m2)
1: boxcox(m2)



More information about the R-devel mailing list