Hi,
A few years ago, class() on a matrix was modified to return c("matrix",
"array") instead of just "matrix", thus formalizing the fact that a
matrix is an array. Concretely this change meant that is.array(),
inherits() and is() were finally in agreement:
> is.array(matrix())
[1] TRUE
> inherits(matrix(), "array") # used to return FALSE
[1] TRUE
> is(matrix(), "array") # also used to return FALSE
[1] TRUE
Has the same kind of change be considered for raster objects? A raster
object is a matrix, and this is acknowledged by is.matrix() but not by
inherits() or is():
> r <- as.raster(array(runif(60), 5:3))
> is.matrix(r)
[1] TRUE
> inherits(r, "matrix")
[1] FALSE
> is(r, "matrix")
[1] FALSE
This is because class(r) only returns "raster":
> class(r)
[1] "raster"
Also, because of this, 'r' is not considered an array in a consistent
manner either:
> is.array(r)
[1] TRUE
> inherits(r, "array")
[1] FALSE
> is(r, "array")
[1] FALSE
These issues would go away if class(r) was returning c("raster",
"matrix", "array") instead of just "raster":
> class(r) <- c("raster", "matrix", "array")
> inherits(r, "matrix")
[1] TRUE
> is(r, "matrix")
[1] TRUE
> inherits(r, "array")
[1] TRUE
> is(r, "array")
[1] TRUE
Has this been considered?
I'm aware that this kind of change has the potential to be quite
disruptive because it would break any code around that uses things like
if (class(r) == "raster") ...
instead of
if (is.raster(r)) ...
or
if (inherits(r, "raster")) ...
But consistency is priceless isn't it?
Thanks,
H.
--
Hervé Pagès
Bioconductor Core Team
[email protected]
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel