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) } dfun3(fcall3) 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 print(ls(parent.frame())) 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) locale: [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 [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C attached base packages: [1] stats graphics grDevices utils datasets methods base 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@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel