[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