removeDoubleColonSurvival (or 'f', as it was shown in the example) could be changed to only remove the 'survival::' from expressions that involve the names to be used in specials. E.g., change
if (is.call(expr) && identical(expr[[1]], doubleColon) && identical(expr[[2]], survival)) to specialNames <- c("strata", "whatever") ... if (is.call(expr) && identical(expr[[1]], doubleColon) && identical(expr[[2]], survival) && is.name(expr[[3]]) && is.element(as.character(expr[[3]]), specialNames)) -Bill On Tue, Aug 27, 2024 at 7:01 AM Duncan Murdoch <murdoch.dun...@gmail.com> wrote: > On 2024-08-27 9:43 a.m., Therneau, Terry M., Ph.D. via R-devel wrote: > > You are right of course, Peter, but I can see where some will get > confused. In a formula > > some symbols and functions are special operators, and others are simple > functions. That > > is the reason one needs I(events/time) to put a rate in as a > variable. Someone who > > types 'offset' at the command line will see that there actually IS a > function behind the > > scenes. > > > > Does anyone see a downside to Bill Dunlap's suggestion where the first > step of my formula > > processing would be to "clean off" any survival:: modifiers? That is, > something that > > will break? After all, the code already has a lot of "if (....) " > lines for other common > > user errors. I could view it as just saving me the time to deal with > the 'we found an > > error' emails. I would output the corrected version as the "call" > component. > > I don't know if you have any data vectors that someone might use in a > fit, but conceivably > > survdiff( Surv(time, status) ~ survival::datavector + > strata(inst), data=lung) > > would mean something different than > > survdiff( Surv(time, status) ~ datavector + > strata(inst), data=lung) > > if a user had a vector named datavector. > > Duncan Murdoch > > > > > Terry > > > > On 8/27/24 03:38, peter dalgaard wrote: > >> In my view, that's just plain wrong, because strata() is not a function > but a special operator in a model formula. Wouldn't it also blow up on > stats::offset()? > >> > >> Oh, yes it would: > >> > >>> lm(y~x+offset(z)) > >> Call: > >> lm(formula = y ~ x + offset(z)) > >> > >> Coefficients: > >> (Intercept) x > >> 0.7350 0.0719 > >> > >>> lm(y~x+stats::offset(z)) > >> Call: > >> lm(formula = y ~ x + stats::offset(z)) > >> > >> Coefficients: > >> (Intercept) x stats::offset(z) > >> 0.6457 0.1078 0.8521 > >> > >> > >> Or, to be facetious: > >> > >>> lm(y~base::"+"(x,z)) > >> Call: > >> lm(formula = y ~ base::"+"(x, z)) > >> > >> Coefficients: > >> (Intercept) base::"+"(x, z) > >> 0.4516 0.4383 > >> > >> > >> > >> -pd > >> > >>> On 26 Aug 2024, at 16:42 , Therneau, Terry M., Ph.D. via R-devel< > r-devel@r-project.org> wrote: > >>> > >>> The survival package makes significant use of the "specials" argument > of terms(), before > >>> calling model.frame; it is part of nearly every modeling function. The > reason is that > >>> strata argments simply have to be handled differently than other > things on the right hand > >>> side. Likewise for tt() and cluster(), though those are much less > frequent. > >>> > >>> I now get "bug reports" from the growing segment that believes one > should put > >>> packagename:: in front of every single instance. For instance > >>> fit <- survival::survdiff( survival::Surv(time, status) ~ > ph.karno + > >>> survival::strata(inst), data= survival::lung) > >>> > >>> This fails to give the correct answer because it fools terms(formula, > specials= > >>> "strata"). I've stood firm in my response of "that's your bug, not > mine", but I begin > >>> to believe I am swimming uphill. One person responded that it was > company policy to > >>> qualify everything. > >>> > >>> I don't see an easy way to fix survival, and even if I did it would be > a tremendous amout > >>> of work. What are other's thoughts? > >>> > >>> Terry > >>> > >>> > >>> > >>> -- > >>> > >>> Terry M Therneau, PhD > >>> Department of Quantitative Health Sciences > >>> Mayo Clinic > >>> thern...@mayo.edu > >>> > >>> "TERR-ree THUR-noh" > >>> > >>> [[alternative HTML version deleted]] > >>> > >>> ______________________________________________ > >>> R-devel@r-project.org mailing list > >>> > https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fstat.ethz.ch%2Fmailman%2Flistinfo%2Fr-devel&data=05%7C02%7Ctherneau%40mayo.edu%7C7659a5f0f0d34746966a08dcc6739fed%7Ca25fff9c3f634fb29a8ad9bdd0321f9a%7C0%7C0%7C638603447151664511%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C%7C&sdata=UAkeksswfFdLwOdzQIOXUPC2Ey255oW%2FX41kptNZNcU%3D&reserved=0 > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-devel@r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel