[R-pkg-devel] Getting summary.glm to use Matrix::chol2inv

Mark Donoghoe m@rkdonoghoe @end|ng |rom gm@||@com
Mon Dec 23 20:26:25 CET 2024


Thank you, I was hoping that was not the case but your explanation of
the search order from within a package makes sense.

Happy holidays,
Mark

On Tue, 24 Dec 2024 at 04:29, Duncan Murdoch <murdoch.duncan using gmail.com> wrote:
>
> I think the only way to do this is to write your own summary.* method
> for your objects.  You should modify their class (e.g. to `c("glm2",
> "glm")` so that your new summary method `summary.glm2` is called instead
> of `summary.glm`.
>
> Changing the search path wouldn't work.  Search order from within a
> package looks at locals, then imports, then the base package (where
> chol2inv would be found), then the search list.
>
> The source for the standard summary.glm function is available, e.g.
> here:
> https://github.com/wch/r-source/blob/cfda9838f261b1c77c5ac6a5b0deed88021a2156/src/library/stats/R/glm.R#L687-L773
> .  You can copy that into your package, then modify it to work with
> Matrix.  You should list "The R Core Team" as a copyright holder on that
> file if you do this so you're not violating the R license.
>
> Duncan Murdoch
>
>
> On 2024-12-22 4:26 p.m., Mark Donoghoe wrote:
> > Hi,
> >
> > I am trying to implement a new method for glm2 which allows the use of
> > the Matrix package to work with large data.
> >
> > I have added Matrix to Suggests, and when the new method is requested,
> > the following check is performed:
> >
> > if (!requireNamespace("Matrix", quietly = TRUE)) {
> >        stop("Package \"Matrix\" must be installed to use method =
> > \"glm.fit2.Matrix\".",
> >             call. = FALSE)
> >      }
> >
> > This works fine. However, I would like the user to be able to use
> > summary.glm on the fitted object x, and it effectively calls
> > chol2inv(x$qr$qr[1:p,1:p]), which fails if x$qr$qr is not a (small m)
> > matrix:
> >
> > Error in chol2inv(Qr$qr[p1, p1, drop = FALSE]) :
> >    'a' must be a numeric matrix
> >
> > I can return the matrix version of x$qr$qr, but this can be quite
> > large and ideally I would like to return the Matrix version, and have
> > summary.glm automatically call the Matrix version of chol2inv.
> >
> > I imagine this would require changing the search path, which I
> > understand is not recommended, but I am not even sure how to go about
> > it, or if there is another solution that wouldn't require a custom
> > version of summary.glm. I also tried attachNamespace in a similar code
> > block when glm.fit2.Matrix is called, but that did not work.
> >
> > Thanks in advance for any suggestions.
> >
> > Mark
> >
> > ______________________________________________
> > R-package-devel using r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-package-devel
>



More information about the R-package-devel mailing list