On 2026-03-09 11:39 a.m., Serguei Sokol via R-devel wrote:
Le 09/03/2026 à 12:53, Tim Taylor a écrit :
I appreciate there are likely many places where calling a stats function via 
`::` and without the stats package being loaded could be problematic but would 
R core have any interest in adapting functions to accommodate this where 
possible?

The example I ran in to today can be seen below:

ex <- function() {
      counts <- c(18,17,15,20,10,20,25,13,12)
      outcome <- gl(3,1,9)
      treatment <- gl(3,3)
      stats::glm(counts ~ outcome + treatment, family = "poisson")
}

tools::R(ex)
#>
#> Call:  stats::glm(formula = counts ~ outcome + treatment, family = "poisson")
#>
#> Coefficients:
#> (Intercept)     outcome2     outcome3   treatment2   treatment3
#>   3.045e+00   -4.543e-01   -2.930e-01    6.972e-16    8.237e-16
#>
#> Degrees of Freedom: 8 Total (i.e. Null);  4 Residual
#> Null Deviance:        10.58
#> Residual Deviance: 5.129  AIC: 56.76

tools::R(ex, env=c("R_DEFAULT_PACKAGES=NULL"))
#> Error: error in inferior call:
#>   object 'poisson' of mode 'function' was not found

The second call fails due to the following line in glm:

if (is.character(family))
          family <- get(family, mode = "function", envir = parent.frame())

A non-breaking patch (AFAICT) could add an additional branch that explicitly 
searches a lookup of functions in the stats package if the above call to `get` 
failed.
You can do it on your own side by modifying the function 'ex' like:

ex <- function() {
      counts <- c(18,17,15,20,10,20,25,13,12)
      outcome <- gl(3,1,9)
      treatment <- gl(3,3)
      require(stats)
      stats::glm(counts ~ outcome + treatment, family = "poisson")
}

Note "require(stats)" before glm() call. In a classical R env, this is almost a 
no-cost operation because stats is already attached and in R_DEFAULT_PACKAGES=NULL
   case, it does what you need.

That's a relatively harmless thing to do in your own scripts, but you shouldn't do that in a package that you expect others to use. There may be a reason they don't have stats on the search list, and that puts it there.

Duncan Murdoch

______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to