>>>>> John Chambers <j...@r-project.org>
>>>>>     on Mon, 7 Dec 2015 16:05:59 -0800 writes:

    > We do need an explicit method here, I think.
    > The issue is that as() uses methods for the generic function coerce() but 
cannot use inheritance in the usual way (if it did, you would be immediately 
back with no change, since "integer" inherits from "numeric").

    > Copying in the general method for coercing to "numeric" as an explicit 
method for "integer" gives the expected result:

    >> setMethod("coerce", c("integer", "numeric"), getMethod("coerce", 
c("ANY", "numeric")))
    > [1] "coerce"
    >> typeof(as(1L, "numeric"))
    > [1] "double"

    > Seems like a reasonable addition to the code, unless someone sees a 
problem.
    > John

I guess that that some package checks (in CRAN + Bioc + ... -
land) will break,
but I still think we should add such a coercion to R.

Martin



    > On Dec 7, 2015, at 3:37 PM, Benjamin Tyner <bty...@gmail.com> wrote:

    >> Perhaps it is not that surprising, given that
    >> 
    >> > mode(1L)
    >> [1] "numeric"
    >> 
    >> and
    >> 
    >> > is.numeric(1L)
    >> [1] TRUE
    >> 
    >> On the other hand, this is curious, to say the least:
    >> 
    >> > is.double(as(1L, "double"))
    >> [1] FALSE
    >> 
    >>> Here's the surprising behavior:
    >>> 
    >>> x <- 1L
    >>> xx <- as(x, "numeric")
    >>> class(xx)
    >>> ## [1] "integer"
    >>> 
    >>> It occurs because the call to `as(x, "numeric")` dispatches the coerce
    >>> S4 method for the signature `c("integer", "numeric")`, whose body is
    >>> copied in below.
    >>> 
    >>> function (from, to = "numeric", strict = TRUE)
    >>> if (strict) {
    >>> class(from) <- "numeric"
    >>> from
    >>> } else from
    >>> 
    >>> This in turn does nothing, even when strict=TRUE, because that
    >>> assignment to class "numeric" has no effect:
    >>> 
    >>> x <- 10L
    >>> class(x) <- "numeric"
    >>> class(x)
    >>> [1] "integer"
    >>> 
    >>> Is this the desired behavior for `as(x, "numeric")`?
    >> 
    >> ______________________________________________
    >> R-devel@r-project.org mailing list
    >> https://stat.ethz.ch/mailman/listinfo/r-devel

    > ______________________________________________
    > R-devel@r-project.org mailing list
    > https://stat.ethz.ch/mailman/listinfo/r-devel

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to