Request: make `var` a generic

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Request: make `var` a generic

Kenny Bell-2
Hi all,

I am running into problems using `summary.lm` as calling `var` on a `units`
object does not retain the `units` attribute.

The units package addresses this issue for `mean` by implementing
`mean.units`:

units:::mean.units
function (x, ...)
{
    .as.units(NextMethod(), units(x))
}

This is, however, not possible for `var` (as it's not a generic), which
breaks `summary.lm`:

```
library(units)
#> udunits system database from C:/R/Library/3.5/units/share/udunits
iris$Sepal.Length <- set_units(iris$Sepal.Length, "cm")

summary(lm(Sepal.Length ~ Sepal.Width,
           data = iris))
#> Error in Ops.units(mean(f)^2, var(f)): both operands of the expression
should be "units" objects
```

Created on 2019-01-21 by the [reprex package](https://reprex.tidyverse.org)
(v0.2.1.9000)

Apologies if `stats` package emails shouldn't go here.

Cheers,
Kenny

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Request: make `var` a generic

Edzer Pebesma
Hi Kenny,

yes, there's only so much you can do with S3 methods penetrating other
packages' code; IƱaki discusses this in the blog about the r-quantities
project found at:

https://www.r-spatial.org/r/2018/08/31/quantities-final.html#fitting-linear-models-with-quantities

I'm not sure whether making "var" a generic would not shift the problem
to the next function not being generic, you could experiment with that.

On 1/20/19 6:39 PM, Kenny Bell wrote:

> Hi all,
>
> I am running into problems using `summary.lm` as calling `var` on a `units`
> object does not retain the `units` attribute.
>
> The units package addresses this issue for `mean` by implementing
> `mean.units`:
>
> units:::mean.units
> function (x, ...)
> {
>     .as.units(NextMethod(), units(x))
> }
>
> This is, however, not possible for `var` (as it's not a generic), which
> breaks `summary.lm`:
>
> ```
> library(units)
> #> udunits system database from C:/R/Library/3.5/units/share/udunits
> iris$Sepal.Length <- set_units(iris$Sepal.Length, "cm")
>
> summary(lm(Sepal.Length ~ Sepal.Width,
>            data = iris))
> #> Error in Ops.units(mean(f)^2, var(f)): both operands of the expression
> should be "units" objects
> ```
>
> Created on 2019-01-21 by the [reprex package](https://reprex.tidyverse.org)
> (v0.2.1.9000)
>
> Apologies if `stats` package emails shouldn't go here.
>
> Cheers,
> Kenny
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

--
Edzer Pebesma
Institute for Geoinformatics
Heisenbergstrasse 2, 48151 Muenster, Germany
Phone: +49 251 8333081
______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel