[Rd] expand.model.frame() fails when subset is specified (PR#979)

gregory_r_warnes@groton.pfizer.com gregory_r_warnes@groton.pfizer.com
Thu, 14 Jun 2001 20:15:54 +0200 (MET DST)


Full_Name: Gregory R. Warnes
Version: 1.2.0, 1.2.3
OS: SunOS gsun124 5.8 Generic_108528-03 sun4u sparc SUNW,Ultra-5_10
Submission from: (NULL) (12.18.36.49)


When using expand.model.frame on a model that specifies a subset selection, 
an error is generated on the variable used for the subset selection.  

Example:

> data <- data.frame(x=1:10,y=1:10,z=1:10,m=1:10)
> model <- lm( y ~ x, data=data, subset=m<8)
> expand.model.frame(model, ~ z)
Error in [.data.frame(structure(list(y = c(1, 2, 3, 4, 5, 6, 7, 8, 9,  : 
        Object "m" not found

The patch below uses "eval" and "call" with the appropriate
environment instead of calling model.frame directly. This results in:

> source("/home/warneg/R-src/R-1.2.3/src/library/base/R/expand.model.frame.R")
> expand.model.frame(model, ~ z)
  y x z
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
5 5 5 5
6 6 6 6
7 7 7 7

-Greg Warnes

---------START OF PATCH----------

diff -c R-1.2.3.orig/src/library/base/R/expand.model.frame.R
R-1.2.3/src/library
/base/R/expand.model.frame.R
*** R-1.2.3.orig/src/library/base/R/expand.model.frame.R        Mon Jun 11
16:30
:51 2001
--- /home/warneg/R-src/R-1.2.3/src/library/base/R/expand.model.frame.R  Mon Jun

11 16:30:51 2001
***************
*** 18,27 ****
      if (!na.expand){
          naa <- model$call$na.action
          subset <- model$call$subset
!         rval <- model.frame(ff, data=data, subset=subset, na.action=naa)
      } else {
          subset <- model$call$subset
!         rval <- model.frame(ff, data=data, subset=subset, na.action=I)
          oldmf <- model.frame(model)
          keep <- match(rownames(oldmf), rownames(rval))
          rval <- rval[keep, ]
--- 18,29 ----
      if (!na.expand){
          naa <- model$call$na.action
          subset <- model$call$subset
!         rval <- eval(call("model.frame",ff, data = data, subset = subset, 
!                       na.action = naa),enclos )
      } else {
          subset <- model$call$subset
!         rval <- eval(call("model.frame",ff, data = data, subset = subset, 
!                           na.action = I), enclos)
          oldmf <- model.frame(model)
          keep <- match(rownames(oldmf), rownames(rval))
          rval <- rval[keep, ]

---------END OF PATCH----------

--please do not edit the information below--

Version:
 platform = sparc-sun-solaris2.8
 arch = sparc
 os = solaris2.8
 system = sparc, solaris2.8
 status = 
 major = 1
 minor = 2.0
 year = 2000
 month = 12
 day = 15
 language = R

Search Path:
 .GlobalEnv, package:eda, package:ctest, Autoloads, package:base



-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel 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-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._