[R] problem with expand.model.frame

John Fox jfox at mcmaster.ca
Sat Nov 2 18:11:25 CET 2002


Dear R list members,

I'm encountering a problem with expand.model.frame(): Suppose that I define 
the following simple function (meant
just to illustrate the problem):

     > fun <- function(model){
     +     expand.model.frame(model, all.vars(formula(model)))
     +     }
     >

and I have the following model, created with an explicit data argument:

     > mod

     Call:
     lm(formula = prestige ~ income + I(education^2), data = Prestige)

     Coefficients:
     (Intercept)          income  I(education^2)
         15.129723        0.001262        0.188479

Here fun() works fine, adding education from the data frame Prestige to the 
model frame:

     > fun(mod)
                             prestige income I(education^2) education
     GOV.ADMINISTRATORS            68.8  12351       171.8721     13.11
     GENERAL.MANAGERS              69.1  25879       150.3076     12.26
     ACCOUNTANTS                   63.4   9271       163.0729     12.77
     . . .
     BOOKBINDERS                   35.2   3617        73.1025      8.55

Now suppose that I have the following model, fit with the data frame 
Prestige attached to the search path, but no
explicit data argument:

     > mod.2

     Call: lm(formula = prestige ~ income + I(education^2))

     Coefficients:
     (Intercept)          income  I(education^2)
         15.129723        0.001262        0.188479

Calling fun() with this model as an argument produces an error:

     > fun(mod.2)
     Error in eval(expr, envir, enclos) : Object "prestige" not found

     > traceback()
     8: eval(expr, envir, enclos)
     7: eval(predvars, data, env)
     6: model.frame.default(prestige ~ income + I(education^2) + (prestige +
         income + education), data = NULL, subset = NULL, na.action = NULL)
     5: model.frame(prestige ~ income + I(education^2) + (prestige +
         income + education), data = NULL, subset = NULL, na.action = NULL)
     4: eval(expr, envir, enclos)
     3: eval(call("model.frame", ff, data = data, subset = subset, 
na.action = naa),
         envir)
     2: expand.model.frame(model, all.vars(formula(model)))
     1: fun(mod.2)


Yet the environment of the model formula for mod.2 (which is the default 
environment for expand.model.formula) is
the global environment, and the variable prestige is accessible (via the 
attached data frame Prestige) from the
global environment):

     > environment(formula(mod.2))
     <environment: R_GlobalEnv>

     > get("prestige", env=.GlobalEnv)
     [1] 68.8 69.1 63.4 56.8 73.5 77.6 72.6 78.1 73.1 68.8 62.0 60.0 53.8 
62.2 74.9
     [16] 55.1 82.3 58.1 58.3 72.8 84.6 59.6 66.1 87.2 66.7 68.4 64.7 34.9 
72.1 69.3
     [31] 67.5 57.2 57.6 54.1 46.0 41.9 49.4 42.3 47.7 30.9 32.7 38.7 36.1 
37.2 38.1
     [46] 29.4 51.1 35.7 35.6 41.5 40.2 26.5 14.8 23.3 47.3 47.1 51.1 43.5 
51.6 29.7
     [61] 20.2 54.9 25.9 20.8 17.3 20.1 44.1 21.5 35.3 38.9 25.2 34.8 23.2 
33.3 28.8
     [76] 42.5 44.2 35.9 41.8 35.9 43.7 50.8 37.2 28.2 38.1 50.3 27.3 40.9 
50.2 51.1
     [91] 38.9 36.2 29.9 42.9 26.5 66.1 48.9 35.9 25.1 26.1 42.2 35.2

     > search()
     [1] ".GlobalEnv"     "Prestige"       "package:modreg" "package:car"
     [5] "package:ctest"  "Autoloads"      "package:base"
     >

Obviously, I'm not thinking about this properly. My aim is to have fun() 
work whether or not the model was created
with an explicit data argument.

I'm using R 1.6.0 under WIndows 2000.

Any help would be appreciated.

Thanks,
  John
-----------------------------------------------------
John Fox
Department of Sociology
McMaster University
Hamilton, Ontario, Canada L8S 4M4
email: jfox at mcmaster.ca
phone: 905-525-9140x23604
web: www.socsci.mcmaster.ca/jfox
-----------------------------------------------------

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list