[Rd] specials issue, a heads up

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Mon Feb 24 19:21:55 CET 2020

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

More information about the R-devel mailing list