[Rd] In glm explicitly search stats for family functions

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Mon Mar 9 16:49:13 CET 2026


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



More information about the R-devel mailing list