# [Rd] Evaluation puzzle

From: Terry Therneau <therneau_at_mayo.edu>
Date: Thu, 11 Nov 2010 14:08:59 -0600

Here is a simple test case, using a very stripped down version of survexp:

survexp.test <- function(formula, data,

```        weights, subset, na.action, rmap,
times,  cohort=TRUE,  conditional=FALSE,
ratetable=survexp.us, scale=1, npoints, se.fit,
model=FALSE, x=FALSE, y=FALSE) {
```
call <- match.call()
m <- match.call(expand.dots=FALSE)

# keep the first element (the call), and the following selected arguments     m <- m[c(1, match(c('formula', 'data', 'weights', 'subset', 'na.action'),

```                      names(m), nomatch=0))]
```
m[[1]] <- as.name("model.frame")

# Add in the ratetable variables
varlist <- attr(ratetable, 'dimid')
tform <- paste(deparse(formula), paste(varlist, collapse='+'), sep='+')     m\$formula <- tform

print(m)
print(ls(parent.frame()))
mf <- eval(m, parent.frame())

names(mf)
}

Here is the test data

tdata <- data.frame(age= c(12, 24, 36)*365.25, sex=c(1,2,1),

```                    year=as.Date('1953/03/10', '1960/02/23', '1978/09.22'))
tfun <- function(mydata) {
zed <- 100 + (1:nrow(mydata)) * 20
survexp.test(zed ~ 1, data=mydata)
}

```

And the result of the exercise.

% R --vanilla
R version 2.11.0 (2010-04-22)

> library(survival) # to pick up the survexp.us data
> tfun(tdata)

model.frame(formula = "zed ~ 1+age+sex+year", data = mydata) [1] "mydata" "zed"

Eval is being called with the expression shown and an environment that contains the relevant variables in that expression: zed and mydata. Yet it fails to find the variable zed.

I don't see anything relevant in the manual pages for either eval or model.frame. I suspect that there is an invisible, undocumented, magic argument somewhere.

My second problem is a puzzler:

> options(error=recover)
> tfun(tdata)
model.frame(formula = "zed ~ 1+age+sex+year", data = mydata) [1] "mydata" "zed"

Enter a frame number, or 0 to exit

1. tfun(tdata)
2. survexp.test(zed ~ 1, data = mydata)
3. eval(m, parent.frame())
4. eval(expr, envir, enclos)
5. model.frame(formula = "zed ~ 1+age+sex+year", data = mydata)
6. model.frame.default(formula = "zed ~ 1+age+sex+year", data = mydata)
7. eval(predvars, data, env)
8. eval(expr, envir, enclos)

Selection: 2
Called from: model.frame.default(formula = "zed ~ 1+age+sex+year", data = mydata)

Why does selecting "2" result in going to frame "6"?

Terry Therneau

R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Thu 11 Nov 2010 - 20:11:55 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 Thu 11 Nov 2010 - 22:40:19 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.