t y as.raster no conmutan; ¿por qué no conmutarán?

Creo una minimatriz, la convierto en un raster y la represento:

Ahora, con la matriz traspuesta,

obtengo

que difiere de cuando invierto el orden de las operaciones, i.e.,

Que visualmente es

¿Por qué, Dios mío, por qué? (Si alguien sabe razonarlo y tiene tiempo y disposición, siéntase libre de hacerlo en la sección de comentarios).

4 comentarios sobre “t y as.raster no conmutan; ¿por qué no conmutarán?

  1. Iñaki 3 mayo, 2018 15:03

    Parece que un “raster” tiene una representación por filas en lugar de por columnas como las matrices:

    as.vector(m)
    #> [1] 0.00 0.00 0.33 0.66 0.90 0.90
    as.vector(as.raster(m))
    #> [1] “#000000” “#545454” “#E6E6E6” “#000000” “#A8A8A8” “#E6E6E6”

    Sin embargo,

    as.vector(as.matrix(as.raster(m)))
    #> [1] “#000000” “#000000” “#545454” “#A8A8A8” “#E6E6E6” “#E6E6E6”

    No sé si esto es a propósito o no, pero el caso es que no hay un método S3 “t.raster”, y la implementación por defecto de “t” parece que se fía de que el layout va a ser por columnas.

    A mí me parece un bug: bien porque hace falta definir un “t.raster” si esa representación por filas viene bien por x… o bien la representación es incorrecta. De hecho, el manual dice que un raster es “a matrix of colour values”. Así que habría que reportarlo en r-devel, aunque me temo que podrían contestar que el manual también dice que “It is not expected that the user will need to call these functions directly”.

  2. Iñaki 3 mayo, 2018 15:05

    Además,

    as.vector(as.raster(m))[2]
    #> [1] “#545454”
    as.raster(m)[2]
    #> [1] “#000000”

    no parece muy correcto.

  3. Iñaki 3 mayo, 2018 15:07

    Hay una nota en la documentación:

    “Raster images are internally represented row-first, which can cause confusion when trying to manipulate a raster object. The recommended approach is to coerce a raster to a matrix, perform the manipulation, then convert back to a raster”.

  4. Carlos J. Gil Bellosta 6 mayo, 2018 18:16

    ¡Gracias por mirar esto! La verdad, es un poco antiintuitivo y, en cualquier caso, atenta gravemente contra el principio de mínima sorpresa. Habida cuenta de que quienes programan estas cosas no son pendejos, me intriga saber qué cosas los indujeron a implementarlo “del revés”.

Comenta

Your email address will not be published.

Puedes usar estas etiquetas y atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">