I got good feedback from the list about a scope issue, so I am coming back for 
more.
Prior issue:   users who type survival::coxph(survival::Surv(time, status) ~ x1 
+ x2 + surv ival::strata(group), data=mydata)
This messes up the character string matching for strata, done via   tt <- 
terms(formula, specials= �strata�).  The code runs, and gives the wrong answer 
(group is treated as an ordinary covariate).

The solution

  1.  Add code very early that rewrites the formula without the offendinge 
survival:: string
  2.  Before calling model.frame(), insert my copy of strata into the calling 
chain
    coxenv <- new.env(parent= environment(formula))
    assign("strata", survival::strata, envir= coxenv)
    environment(formula) <- coxenv

The second part of this deals with those who want to use survival functions but 
not use library(survival).


Now to the question.
I had always (naively) assumed that the Surv(), strata(), etc calls within a 
coxph formula would be resolved first within the survival namespace.  I realize 
now that this is not true: they get resoloved within model.frame.  If a user 
has their own Surv, it will get used.
For ultimate safety, I am thinking of extending the above to all of the 
internal survival functions that might be used in a formula: Surv, strata, 
pspline, cluster, ratetable  (I think that�s all).   An intitial limited test 
looks okay, but before anything migrates to CRAN I am looking for any feedback. 
  The current test version also prints a warning when removing the extraneous 
�survival::� modifier, which I will retain for at least a little while although 
I personally detest receiving such messages.

Terry T.

        [[alternative HTML version deleted]]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to