[Rd] help with eval()

From: Terry Therneau <therneau_at_mayo.edu>
Date: Mon, 18 Apr 2011 16:51:50 -0500

I've narrowed my scope problems with predict.coxph further. Here is a condensed example:

fcall3 <- as.formula("time ~ age")
dfun3 <- function(dcall) {

    fit <- lm(dcall, data=lung, model=FALSE)     model.frame(fit)

The final call fails: it can't find 'dcall'.

The relevant code in model.frame.lm is:

       env <- environment(formula$terms)
       if (is.null(env)) 
            env <- parent.frame()        
	eval(fcall, env, parent.frame())

If the environment of the formula is .Globalenv, as it is here, the contents of parent.frame() are ignored. Adding a

statement just above the final call shows that it isn't a scope issue: the variables we want are there.

  I don't understand the logic behind looking for variables in the place the formula was first typed (this is not a complaint). The inability to look elsewhere however has stymied my efforts to fix the scoping problem in predict.coxph, unless I drop the env(formula) argument alltogether. But I assume there must be good reasons for it's inclusion and am reluctant to do so.

Terry Therneau

> sessionInfo()

R version 2.13.0 RC (2011-04-12 r55424)
Platform: x86_64-unknown-linux-gnu (64-bit)


 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=C              
 [5] LC_MONETARY=C              LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods

PS. This also fails
dfun3 <- function(dcall) {

    fit <- lm(dcall, data=lung)
    model.frame(fit, subset=1:10)
You just need to force model.frame.lm to recreate data.

R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Mon 18 Apr 2011 - 21:54:44 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Tue 19 Apr 2011 - 05:20:47 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.

list of date sections of archive