Notice that the stats package contains the same issue: For some reason it defines an offset() function (for no particular reason, afaics) which just returns its argument. So
> x <- rnorm(10) > y <- z <- 1:10 > lm(x~y+offset(z)) Call: lm(formula = x ~ y + offset(z)) Coefficients: (Intercept) y 0.8253 -1.0840 > lm(x~y+stats::offset(z)) Call: lm(formula = x ~ y + stats::offset(z)) Coefficients: (Intercept) y stats::offset(z) 0.82531 -0.08397 NA So I'm inclined to say that formulas are formulas and functions using formulas interpret functions and operators at their own convenience. You also deserve what you get from > lm(x~base::`+`(y,z)) Call: lm(formula = x ~ base::`+`(y, z)) Coefficients: (Intercept) base::`+`(y, z) 0.82531 -0.04198 -pd > On 24 Feb 2020, at 19:21 , Duncan Murdoch <murdoch.dun...@gmail.com> wrote: > > On 24/02/2020 8:55 a.m., Therneau, Terry M., Ph.D. via R-devel wrote: >> I recently had a long argument wrt the survival package, namely that the >> following code >> didn't do what they expected, and so they reported it as a bug >> survival::coxph( survival::Surv(time, status) ~ age + sex + >> survival::strata(inst), >> data=lung) >> a. The Google R style guide recommends that one put :: everywhere >> b. This breaks the recognition of cluster as a "special" in the terms >> function. >> I've been stubborn and said that their misunderstanding of how formulas work >> is not my >> problem. But I'm sure that the issue will come up again, and multiple >> other packages >> will break. >> A big problem is that the code runs, it just gives the wrong answer. >> Suggestions? > > I don't know how widely used survival::strata is versus the special strata > (or cluster, or other specials). If you were just introducing this now, I'd > try to make sure that only one of those worked: don't have any functions > matching the names of specials, or have functions that generate an error if > you call them. I did that in the much less widely used "tables" package, > e.g. Heading() has special interpretation, and the Heading function is > defined as > > Heading <- function(name = NULL, override = TRUE, > character.only = FALSE, > nearData = TRUE) > stop("This is a pseudo-function, not meant to be called.") > > However, survival has far more users than tables does, so changing the name > of your special functions or the corresponding regular functions could be a > huge headache. > > Perhaps there's a way to set a flag before evaluating the function in the > formula, and generate a warning if survival::strata is called when it looks > like the special function is intended. > > Duncan Murdoch > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel -- Peter Dalgaard, Professor, Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Office: A 4.23 Email: pd....@cbs.dk Priv: pda...@gmail.com ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel